Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/sacoo7/socketcluster-client-swift
Native iOS/macOS client written in swift 4/swift 5
https://github.com/sacoo7/socketcluster-client-swift
client-library ios-swift macos socketcluster socketcluster-client swift4
Last synced: 3 months ago
JSON representation
Native iOS/macOS client written in swift 4/swift 5
- Host: GitHub
- URL: https://github.com/sacoo7/socketcluster-client-swift
- Owner: sacOO7
- License: apache-2.0
- Created: 2017-09-26T19:23:48.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2022-12-12T23:46:08.000Z (about 2 years ago)
- Last Synced: 2024-04-30T07:06:16.325Z (8 months ago)
- Topics: client-library, ios-swift, macos, socketcluster, socketcluster-client, swift4
- Language: Swift
- Homepage: https://socketcluster.io/
- Size: 75.2 KB
- Stars: 22
- Watchers: 5
- Forks: 38
- Open Issues: 23
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# socketcluster-client-swift
Native iOS/macOS client written in swift
Overview
--------
This client provides following functionality- Easy to setup and use
- Support for emitting and listening to remote events
- Pub/sub
- Authentication (JWT)Client supports following platforms
- iOS >= 8.0
- macOS>= 10.10
- watchOS >= 2.0
- tvOS >= 9.0Installation and Use
--------------------### [CocoaPods](http://cocoapods.org)
```ruby
pod 'ScClient'
```### Swift Package Manager
- To install add this to depedencies section of Package.swift
```swift
dependencies: [
// other dependencies
.package(url: "https://github.com/sacOO7/ScClient", from: "2.0.1")
]
```
- To use the library add this to target dependencies```swift
targets: [
.target(
name: "tool",
dependencies: [
"ScClient"
])
]
```Description
-----------
Create instance of `scclient` by passing url of socketcluster-server end-point```swift
//Create a client instance
var client = ScClient(url: "http://localhost:8000/socketcluster/")
```
**Important Note** : Default url to socketcluster end-point is always *ws://somedomainname.com/socketcluster/*.#### Registering basic listeners
- Different closure functions are given as an argument to register listeners
- Example : main.swift```swift
import Foundation
import ScClient
var client = ScClient(url: "http://localhost:8000/socketcluster/")var onConnect = {
(client :ScClient) in
print("Connnected to server")
}var onDisconnect = {
(client :ScClient, error : Error?) in
print("Disconnected from server due to ", error?.localizedDescription)
}var onAuthentication = {
(client :ScClient, isAuthenticated : Bool?) in
print("Authenticated is ", isAuthenticated)
startCode(client : client)
}var onSetAuthentication = {
(client : ScClient, token : String?) in
print("Token is ", token)
}
client.setBasicListener(onConnect: onConnect, onConnectError: nil, onDisconnect: onDisconnect)
client.setAuthenticationListener(onSetAuthentication: onSetAuthentication, onAuthentication: onAuthentication)
client.connect()
while(true) {
RunLoop.current.run(until: Date())
usleep(10)
}
func startCode(client scclient.Client) {
// start writing your code from here
// All emit, receive and publish events
}
```#### Connecting to server
- For connecting to server:
```swift
//This will send websocket handshake request to socketcluster-server
client.connect()
```#### Getting connection status
```swift
//This will send websocket handshake request to socketcluster-server
var status = client.isConnected()
```Emitting and listening to events
--------------------------------
#### Event emitter- eventname is name of event and message can be String, boolean, Int or Object
```swift
client.emit(eventName: eventname, data: message as AnyObject)
//client.emit(eventName: "chat", data: "This is my sample message" as AnyObject)
```- To send event with acknowledgement
```swift
client.emitAck(eventName: "chat", data: "This is my sample message" as AnyObject, ack : {
(eventName : String, error : AnyObject? , data : AnyObject?) in
print("Got data for eventName ", eventName, " error is ", error, " data is ", data)
})
```#### Event Listener
- For listening to events :
The object received can be String, Boolean, Int or Object
```swift
// Receiver code without sending acknowledgement back
client.on(eventName: "yell", ack: {
(eventName : String, data : AnyObject?) in
print("Got data for eventName ", eventName, " data is ", data)
})
```- To send acknowledgement back to server
```swift
// Receiver code with ack
client.onAck(eventName: "yell", ack: {
(eventName : String, data : AnyObject?, ack : (AnyObject?, AnyObject?) -> Void) in
print("Got data for eventName ", eventName, " data is ", data)
ack("This is error " as AnyObject, "This is data " as AnyObject)
})
```Implementing Pub-Sub via channels
---------------------------------#### Creating channel
- For creating and subscribing to channels:
```swift
// without acknowledgement
client.subscribe(channelName: "yell")
//with acknowledgement
client.subscribeAck(channelName: "yell", ack : {
(channelName : String, error : AnyObject?, data : AnyObject?) in
if (error is NSNull) {
print("Successfully subscribed to channel ", channelName)
} else {
print("Got error while subscribing ", error)
}
})
```#### Publishing event on channel
- For publishing event :
```swift
// without acknowledgement
client.publish(channelName: "yell", data: "I am sending data to yell" as AnyObject)// with acknowledgement
client.publishAck(channelName: "yell", data: "I am sending data to yell" as AnyObject, ack : {
(channelName : String, error : AnyObject?, data : AnyObject?) in
if (error is NSNull) {
print("Successfully published to channel ", channelName)
}else {
print("Got error while publishing ", error)
}
})
```
#### Listening to channel- For listening to channel event :
```swift
client.onChannel(channelName: "yell", ack: {
(channelName : String , data : AnyObject?) in
print ("Got data for channel", channelName, " object data is ", data)
})
```
#### Un-subscribing to channel```swift
// without acknowledgement
client.unsubscribe(channelName: "yell")
//with acknowledgement
client.unsubscribeAck(channelName: "yell", ack : {
(channelName : String, error : AnyObject?, data : AnyObject?) in
if (error is NSNull) {
print("Successfully unsubscribed to channel ", channelName)
} else {
print("Got error while unsubscribing ", error)
}
})
```#### Disable SSL Certificate Verification
```swift
var client = ScClient(url: "http://localhost:8000/socketcluster/")
client.disableSSLVerification(true)
```
### Custom QueueA custom queue can be specified when delegate methods are called. By default `DispatchQueue.main` is used, thus making all delegate methods calls run on the main thread. It is important to note that all WebSocket processing is done on a background thread, only the delegate method calls are changed when modifying the queue. The actual processing is always on a background thread and will not pause your app.
```swift
var client = ScClient(url: "http://localhost:8000/socketcluster/")
//create a custom queue
client.setBackgroundQueue(queueName : "com.example.chatapp")
```### Custom Headers
You can also override the default websocket headers with your own custom ones like so:
```swift
var request = URLRequest(url: URL(string: "http://localhost:8000/socketcluster/")!)
request.timeoutInterval = 5
request.setValue("someother protocols", forHTTPHeaderField: "Sec-WebSocket-Protocol")
request.setValue("14", forHTTPHeaderField: "Sec-WebSocket-Version")
request.setValue("Everything is Awesome!", forHTTPHeaderField: "My-Awesome-Header")
var client = ScClient(URLRequest: request)
```### Custom HTTP Method
Your server may use a different HTTP method when connecting to the websocket:
```swift
var request = URLRequest(url: URL(string: "http://localhost:8000/socketcluster/")!)
request.httpMethod = "POST"
request.timeoutInterval = 5
var client = ScClient(URLRequest: request)
```### Protocols
If you need to specify a protocol, simple add it to the init:
```swift
//chat and superchat are the example protocols here
var request = URLRequest(url: URL(string: "http://localhost:8000/socketcluster/")!)
var client = ScClient(URLRequest: request, protocols: ["chat","superchat"])
```