diff --git a/README.md b/README.md index ff2aed8..b5ef8be 100644 --- a/README.md +++ b/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.2. +##Example +```swift +let socket = SocketIOClient(socketURL: "localhost:8080") -For Swift 1.1 use the master. +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+) ----------------- 1. Copy the SwiftIO folder into your Xcode project! @@ -36,13 +73,23 @@ Import in your swift file: import Socket_IO_Client_Swift ``` -API -=== +##API 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. + +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 ------- 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. 5. `reconnectAttempt` - Emitted when attempting to reconnect. -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 -================ +##Detailed Example A more detailed example can be found [here](https://github.com/nuclearace/socket.io-client-swift-example) -License -======= +##License MIT diff --git a/SwiftIO/SocketEngine.swift b/SwiftIO/SocketEngine.swift index 8c32b68..52c6091 100644 --- a/SwiftIO/SocketEngine.swift +++ b/SwiftIO/SocketEngine.swift @@ -515,11 +515,7 @@ public class SocketEngine: NSObject, WebSocketDelegate { } func sendPing() { - if self.websocket { - self.sendWebSocketMessage("", withType: PacketType.PING) - } else { - self.sendPollMessage("", withType: PacketType.PING) - } + self.write("", withType: PacketType.PING, withData: nil) } private func sendPollMessage(var msg:String, withType type:PacketType,