An elegent Stomp client for swift, Base on Starscream websocket library.
- Easy to setup, Very light-weight
- Support all STOMP V1.2 frames. CONNECT, SUBSCRIBE, RECEIPT and ....
- Auto object serialize using native JSON
Encoder
. - Send and receive
Data
andText
- Auto reconnect
- Logging
Quick initialize with minimum requirements:
let url = URL(string: "ws://192.168.88.252:8081/socket")!
self.swiftStomp = SwiftStomp(host: url) //< Create instance
self.swiftStomp.delegate = self //< Set delegate
self.swiftStomp.autoReconnect = true //< Auto reconnect on error or cancel
self.swiftStomp.connect() //< Connect
Implement all delegate methods to handle all STOMP events!
func onConnect(swiftStomp : SwiftStomp, connectType : StompConnectType)
func onDisconnect(swiftStomp : SwiftStomp, disconnectType : StompDisconnectType)
func onMessageReceived(swiftStomp: SwiftStomp, message: Any?, messageId: String, destination: String, headers : [String : String])
func onReceipt(swiftStomp : SwiftStomp, receiptId : String)
func onError(swiftStomp : SwiftStomp, briefDescription : String, fullDescription : String?, receiptId : String?, type : StompErrorType)
Full Connect
signature:
self.swiftStomp.connect(timeout: 5.0, acceptVersion: "1.1,1.2")
If you want to reconnect after any un-expected disconnections, enable autoReconnect
property.
self.swiftStomp.autoReconnect = true
Notice: If you disconnect manually using disconnect()
function, and autoReconnect
is enable, socket will try to reconnect after disconnection. If this is not thing you want, please disable autoReconnect
before call the disconnect()
.
Full Subsribe
signature. Please notice to subscribe only when you ensure connected to the STOMP. I suggest do it in the onConnect
delegate with connectType == .toStomp
swiftStomp.subscribe(to: "/topic/greeting", mode: .clientIndividual)
You have full controll for sending messages. Full signature is as follows:
swiftStomp.send(body: "This is message's text body", to: "/app/greeting", receiptId: "msg-\(Int.random(in: 0..<1000))", headers: [:])
You can check the status of the SwiftStomp by using connectionStatus
property:
switch self.swiftStomp.connectionStatus {
case .connecting:
print("Connecting to the server...")
case .socketConnected:
print("Scoket is connected but STOMP as sub-protocol is not connected yet.")
case .fullyConnected:
print("Both socket and STOMP is connected. Ready for messaging...")
case .socketDisconnected:
print("Socket is disconnected")
}
This example was test with a Spring Boot websocket server with RabbitMQ as an external message broker.
Please refer to the Example for more functionalities
To run the example project, clone the repo, and run pod install
from the Example directory first.
- iOS 10 or above
SwiftStomp is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod 'SwiftStomp'
Ahmad Daneshvar, [email protected]
SwiftStomp is available under the MIT license. See the LICENSE file for more info.