commit
38163d29cb
148
README.md
148
README.md
@ -1,13 +1,50 @@
|
|||||||
Socket.IO-Client-Swift
|
#Socket.IO-Client-Swift
|
||||||
======================
|
Socket.IO-client for iOS/OS X.
|
||||||
|
|
||||||
Socket.IO-client for Swift. Supports ws/wss/polling connections and binary. For socket.io 1.0+ and Swift 1.1.
|
##Example
|
||||||
|
```swift
|
||||||
|
let socket = SocketIOClient(socketURL: "localhost:8080")
|
||||||
|
|
||||||
For Swift 1.2 use the 1.2 branch.
|
socket.on("connect") {data, ack in
|
||||||
|
println("socket connected")
|
||||||
|
}
|
||||||
|
|
||||||
Installation
|
socket.on("currentAmount") {data, ack in
|
||||||
============
|
if let cur = data?[0] as? Double {
|
||||||
|
socket.emitWithAck("canUpdate", cur).onAck(0) {data in
|
||||||
|
socket.emit("update", ["amount": cur + 2.50])
|
||||||
|
}
|
||||||
|
|
||||||
|
ack?("Got your currentAmount", "dude")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Connect
|
||||||
|
socket.connect()
|
||||||
|
```
|
||||||
|
|
||||||
|
##Objective-C Example
|
||||||
|
```objective-c
|
||||||
|
SocketIOClient* socket = [[SocketIOClient alloc] initWithSocketURL:@"localhost:8080" options:nil];
|
||||||
|
|
||||||
|
[socket on: @"connect" callback: ^(NSArray* data, void (^ack)(NSArray*)) {
|
||||||
|
NSLog(@"connected");
|
||||||
|
[socket emitObjc:@"echo" withItems:@[@"echo test"]];
|
||||||
|
[[socket emitWithAckObjc:@"ackack" withItems:@[@"test"]] onAck:0 withCallback:^(NSArray* data) {
|
||||||
|
NSLog(@"Got data");
|
||||||
|
}];
|
||||||
|
}];
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
##Features
|
||||||
|
- Supports socket.io 1.0+
|
||||||
|
- Supports binary
|
||||||
|
- Supports Polling and WebSockets
|
||||||
|
- Supports TLS/SSL
|
||||||
|
- Can be used from Objective-C
|
||||||
|
|
||||||
|
##Installation
|
||||||
Manually (iOS 7+)
|
Manually (iOS 7+)
|
||||||
-----------------
|
-----------------
|
||||||
1. Copy the SwiftIO folder into your Xcode project!
|
1. Copy the SwiftIO folder into your Xcode project!
|
||||||
@ -36,13 +73,23 @@ Import in your swift file:
|
|||||||
import Socket_IO_Client_Swift
|
import Socket_IO_Client_Swift
|
||||||
```
|
```
|
||||||
|
|
||||||
API
|
##API
|
||||||
===
|
|
||||||
Constructors
|
Constructors
|
||||||
-----------
|
-----------
|
||||||
`init(socketURL: String, opts:NSDictionary? = nil)` - Constructs a new client for the given URL. opts can be omitted (will use default values. See example)
|
`init(socketURL: String, opts:NSDictionary? = nil)` - Constructs a new client for the given URL. opts can be omitted (will use default values)
|
||||||
|
|
||||||
`convenience init(socketURL: String, options:NSDictionary?)` - Same as above, but meant for Objective-C. See Objective-C Example.
|
`convenience init(socketURL: String, options:NSDictionary?)` - Same as above, but meant for Objective-C. See Objective-C Example.
|
||||||
|
|
||||||
|
Options
|
||||||
|
-------
|
||||||
|
- `reconnects: Bool` Default is `true`
|
||||||
|
- `reconnectAttempts: Int` Default is `-1` (infinite tries)
|
||||||
|
- `reconnectWait: Int` Default is `10`
|
||||||
|
- `forcePolling: Bool` Default is `false`. `true` forces the client to use xhr-polling.
|
||||||
|
- `forceWebsockets: Bool` Default is `false`. `true` forces the client to use WebSockets.
|
||||||
|
- `nsp: String` Default is `"/"`
|
||||||
|
- `cookies: [NSHTTPCookie]?` An array of NSHTTPCookies. Passed during the handshake. Default is nil.
|
||||||
|
|
||||||
Methods
|
Methods
|
||||||
-------
|
-------
|
||||||
1. `socket.on(name:String, callback:((data:NSArray?, ack:AckEmitter?) -> Void))` - Adds a handler for an event. Items are passed by an array. `ack` can be used to send an ack when one is requested. See example.
|
1. `socket.on(name:String, callback:((data:NSArray?, ack:AckEmitter?) -> Void))` - Adds a handler for an event. Items are passed by an array. `ack` can be used to send an ack when one is requested. See example.
|
||||||
@ -63,87 +110,8 @@ Events
|
|||||||
4. `reconnect` - Emitted when the connection is starting to reconnect.
|
4. `reconnect` - Emitted when the connection is starting to reconnect.
|
||||||
5. `reconnectAttempt` - Emitted when attempting to reconnect.
|
5. `reconnectAttempt` - Emitted when attempting to reconnect.
|
||||||
|
|
||||||
Example
|
##Detailed Example
|
||||||
=======
|
|
||||||
```swift
|
|
||||||
// opts can be omitted, will use default values
|
|
||||||
let socket = SocketIOClient(socketURL: "https://localhost:8080", opts: [
|
|
||||||
"reconnects": true, // Default is true
|
|
||||||
"reconnectAttempts": 5, // Default is -1 (infinite tries)
|
|
||||||
"reconnectWait": 5, // Default is 10
|
|
||||||
"nsp": "swift", // connects to the specified namespace. Default is /
|
|
||||||
"forcePolling": true, // if true the client will only use XHR polling, Default is false (polling/WebSockets)
|
|
||||||
"forceWebsockets": false, // if true the client will only use WebSockets. Trumps forcePolling. Default is false. (polling/WebSockets)
|
|
||||||
"cookies": nil // An array of NSHTTPCookies. Passed during handshake. Default is nil
|
|
||||||
])
|
|
||||||
|
|
||||||
// Called on every event
|
|
||||||
socket.onAny {println("got event: \($0.event) with items \($0.items)")}
|
|
||||||
|
|
||||||
// Socket Events
|
|
||||||
socket.on("connect") {data, ack in
|
|
||||||
println("socket connected")
|
|
||||||
|
|
||||||
// Sending messages
|
|
||||||
socket.emit("testEcho")
|
|
||||||
|
|
||||||
socket.emit("testObject", [
|
|
||||||
"data": true
|
|
||||||
])
|
|
||||||
|
|
||||||
// Sending multiple items per message
|
|
||||||
socket.emit("multTest", [1], 1.4, 1, "true",
|
|
||||||
true, ["test": "foo"], "bar")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Requesting acks, and responding to acks
|
|
||||||
socket.on("ackEvent") {data, ack in
|
|
||||||
if let str = data?[0] as? String {
|
|
||||||
println("Got ackEvent")
|
|
||||||
}
|
|
||||||
|
|
||||||
// data is an array
|
|
||||||
if let int = data?[1] as? Int {
|
|
||||||
println("Got int")
|
|
||||||
}
|
|
||||||
|
|
||||||
// You can specify a custom timeout interval. 0 means no timeout.
|
|
||||||
socket.emitWithAck("ackTest", "test").onAck(0) {data in
|
|
||||||
println(data?[0])
|
|
||||||
}
|
|
||||||
|
|
||||||
ack?("Got your event", "dude")
|
|
||||||
}
|
|
||||||
|
|
||||||
socket.on("jsonTest") {data, ack in
|
|
||||||
if let json = data?[0] as? NSDictionary {
|
|
||||||
println(json["test"]!) // foo bar
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Connecting
|
|
||||||
socket.connect()
|
|
||||||
```
|
|
||||||
|
|
||||||
Objective-C Example
|
|
||||||
===================
|
|
||||||
```objective-c
|
|
||||||
SocketIOClient* socket = [[SocketIOClient alloc] initWithSocketURL:@"localhost:8080" options:nil];
|
|
||||||
|
|
||||||
[socket on: @"connect" callback: ^(NSArray* data, void (^ack)(NSArray*)) {
|
|
||||||
NSLog(@"connected");
|
|
||||||
[socket emitObjc:@"echo" withItems:@[@"echo test"]];
|
|
||||||
[[socket emitWithAckObjc:@"ackack" withItems:@[@"test"]] onAck:0 withCallback:^(NSArray* data) {
|
|
||||||
NSLog(@"Got data");
|
|
||||||
}];
|
|
||||||
}];
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
Detailed Example
|
|
||||||
================
|
|
||||||
A more detailed example can be found [here](https://github.com/nuclearace/socket.io-client-swift-example)
|
A more detailed example can be found [here](https://github.com/nuclearace/socket.io-client-swift-example)
|
||||||
|
|
||||||
License
|
##License
|
||||||
=======
|
|
||||||
MIT
|
MIT
|
||||||
|
|||||||
@ -514,11 +514,7 @@ public class SocketEngine: NSObject, WebSocketDelegate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func sendPing() {
|
func sendPing() {
|
||||||
if self.websocket {
|
self.write("", withType: PacketType.PING, withData: nil)
|
||||||
self.sendWebSocketMessage("", withType: PacketType.PING)
|
|
||||||
} else {
|
|
||||||
self.sendPollMessage("", withType: PacketType.PING)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private func sendPollMessage(var msg:String, withType type:PacketType,
|
private func sendPollMessage(var msg:String, withType type:PacketType,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user