A simple Swift client library for the Faye publish-subscribe messaging server. FayeObjC is implemented atop the Starscream Swift web socket library and will work on both Mac (pending Xcode 6 Swift update) and iPhone projects.
It was heavily inspired by the Objective-C client found here: FayeObjc
Note: For Swift 2.2 please use FayeSwift 0.2.0
FayeSwift is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod "FayeSwift"
Swift Package Manager compatability is coming sson
You can open a connection to your faye server. Note that client
is probably best as a property, so your delegate can stick around. You can initiate a client with a subscription to a specific channel.
client = FayeClient(aFayeURLString: "ws:https://localhost:5222/faye", channel: "/cool")
client.delegate = self
client.connectToServer()
You can then also subscribe to additional channels either with block handlers like so:
let channelBlock:ChannelSubscriptionBlock = {(messageDict) -> Void in
let text: AnyObject? = messageDict["text"]
println("Here is the Block message: \(text)")
}
client.subscribeToChannel("/awesome", block: channelBlock)
or without them letting the delegate handle them like so:
self.client.subscribeToChannel("/delegates_still_rock")
After you are connected, there are some optional delegate methods that we can implement.
connectedToServer is called as soon as the client connects to the Faye server.
func connectedToServer(client: FayeClient) {
println("Connected to Faye server")
}
connectionFailed is called when a cleint fails to connect to Faye server either initially or on a retry.
func connectionFailed(client: FayeClient) {
println("Failed to connect to Faye server!")
}
disconnectedFromServer is called as soon as the client is disconnected from the server..
func disconnectedFromServer(client: FayeClient) {
println("Disconnected from Faye server")
}
didSubscribeToChannel is called when the subscribes to a Faye channel.
func didSubscribeToChannel(client: FayeClient, channel: String) {
println("subscribed to channel \(channel)")
}
didUnsubscribeFromChannel is called when the client unsubscribes to a Faye channel.
func didUnsubscribeFromChannel(client: FayeClient, channel: String) {
println("UNsubscribed from channel \(channel)")
}
The subscriptionFailedWithError method is called when the client fails to subscribe to a Faye channel.
func subscriptionFailedWithError(client: FayeClient, error: subscriptionError) {
println("SUBSCRIPTION FAILED!!!!")
}
The messageReceived is called when the client receives a message from any Faye channel that it is subscribed to.
func messageReceived(client: FayeClient, messageDict: NSDictionary, channel: String) {
let text: AnyObject? = messageDict["text"]
println("Here is the message: \(text)")
self.client.unsubscribeFromChannel(channel)
}
The delegate methods give you a simple way to handle data from the server, but how do you publish data to a Faye channel?
You can call sendMessage to send a dictionary object to a channel
client.sendMessage(["text": textField.text], channel: "/cool")
There is a sample faye server using the NodeJS Faye library. If you have NodeJS installed just run the following commands to install the package:
npm install
And then you can start the Faye server like so:
node faye_server.js
Check out the FayeSwiftDemo project to see how to setup a simple connection to a Faye server.
FayeSwift requires at least iOS 7/OSX 10.10 or above.
- Cocoapods Integration
- Add block handlers
- Complete Docs
- Add Unit Tests
- Swift Package Mananger Support
- Rethink use of optionals (?)
- Support for a long-polling transport (?)
FayeSwift is licensed under the MIT License.