A lightweight extension to subscribe Starscream websocket events with RxSwift
A lightweight extension to Starscream to track websocket events using RxSwift observables.
RxStarscream is available through CocoaPods.
Add the following line to your Podfile
:
pod 'RxStarscream'
Then run:
pod install
Below is a table that shows which version of RxStarscream you should use for
your Swift version.
Swift | RxStarscream | RxSwift |
---|---|---|
>= 4.2 | >= 0.10 | >= 4.3 |
< 4.2 | >= 0.8 | >= 4.0 |
3.X | 0.7 | 3.0.0 - 3.6.1 |
Add this to your Cartfile
github "RxSwiftCommunity/RxStarscream"
Then run:
carthage update
After installing via CococPods or Carthage, you should import the framework.
import RxStarscream
Once imported, you can open a connection to your WebSocket server.
socket = WebSocket(url: URL(string: "ws://localhost:8080/")!)
socket.connect()
Now you can subscribe e.g to all of the websocket events:
socket.rx.response.subscribe(onNext: { (response: WebSocketEvent) in
switch response {
case .connected:
print("Connected")
case .disconnected(let error):
print("Disconnected with optional error : \(error)")
case .message(let msg):
print("Message : \(msg)")
case .data(_):
print("Data")
case .pong:
print("Pong")
}
}).disposed(by: disposeBag)
Or just to a connect event:
socket.rx.connected.subscribe(onNext: { (isConnected: Bool) in
print("Is connected : \(isConnected)")
}).disposed(by: disposeBag)
Or just to a message event:
socket.rx.text.subscribe(onNext: { (message: String) in
print("Message : \(message)")
}).disposed(by: disposeBag)
There’s a sample project (you need to run carthage update
for it to compile).
The sample project uses echo server - https://www.websocket.org/echo.html
Have fun!
Everyone in the RxSwift Slack channel.
Bug reports and pull requests are welcome.
RxStarscream is available under the MIT license. See the LICENSE file for more info.