From 368a9c8af3dccaaa06987e9c25605730466da6d4 Mon Sep 17 00:00:00 2001 From: Erik Date: Sat, 31 Jan 2015 10:10:26 -0500 Subject: [PATCH] API Change: rename methods, add typealias. Update README --- README.md | 49 +++++++++++++++----------------- SwiftIO/SocketEventHandler.swift | 16 +++++------ SwiftIO/SocketIOClient.swift | 10 ++++--- 3 files changed, 37 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index b3ca679..b1b281b 100644 --- a/README.md +++ b/README.md @@ -9,15 +9,25 @@ Installation 2. Create a bridging header for SocketRocket 3. Copy the SwiftIO folder into your xcode project -Use +API === +Constructor +----------- +`init(socketURL: String, opts[String: AnyObject]? = nil)` - Constructs a new client for the given URL. opts can be omitted (will use default values.) Methods ------- 1. `socket.on(name:String, callback:((data:AnyObject?) -> Void))` - Adds a handler for an event. -2. `socket.onMultipleArgs(name:String, callback:((data:[AnyObject]) -> Void))` - Adds a handler for an event that can have multiple items. Items are stored in an array. +2. `socket.onMultipleItems(name:String, callback:((data:AnyObject...) -> Void))` - Adds a handler for an event that can have multiple items. Items are stored in an array. 3. `socket.emit(event:String, args:AnyObject...)` - Sends a message. Can send multiple args. 4. `socket.connect()` - Establishes a connection to the server. A "connect" event is fired upon successful connection. -5. `socket.close()` - Closes the socket. Once a socket is closed it should not be reopened. +5. `socket.close()` - Closes the socket. Once a socket is closed it should not be reopened. + +Events +------ +1. `connect` - Emitted when on a successful connection. +2. `disconnect` - Emitted when the connection is closed. +3. `reconnect` - Emitted when the connection is starting to reconnect. +4. `reconnectAttempt` - Emitted when attempting to reconnect. ```swift // opts can be omitted, will use default values @@ -27,21 +37,20 @@ let socket = SocketIOClient(socketURL: "https://localhost:8080", opts: [ "reconnectWait": 5 // default 10 ]) +// Socket Events socket.on("connect") {data in println("socket connected") // Sending messages socket.emit("testEcho") + socket.emit("testObject", [ "data": true ]) - socket.emit("arrayTest", [1, true, "test", ["test": "test"], data, data]) - socket.emit("stringTest", "stringTest") - socket.emit("intTest", 1) - // Sending multiple args per message - socket.emit("multTest", [data], 1.4, 1, "true", - true, ["test": data], data) + // Sending multiple items per message + socket.emit("multTest", [1], 1.4, 1, "true", + true, ["test": "foo"], "bar") } socket.on("disconnect") {data in @@ -61,6 +70,7 @@ socket.on("reconnectAttempt") {data in println(triesLeft) } } +// End Socket Events socket.on("jsonTest") {data in if let json = data as? NSDictionary { @@ -68,31 +78,18 @@ socket.on("jsonTest") {data in } } -socket.on("boolTest") {data in - if let bool = data as? Bool { - println(bool) // true - } -} - -socket.on("arrayTest") {data in - if let array = data as? NSArray { - println(array[0]) // 2 - println(array[1]) // "test" - } -} - // Messages that have multiple items are passed // by an array -socket.onMultipleArgs("multipleItems") {datas in - if let str = datas[0] as? String { +socket.onMultipleItems("multipleItems") {data in + if let str = data[0] as? String { println(str) } - if let arr = datas[1] as? [Int] { + if let arr = data[1] as? [Int] { println(arr) } - if let obj = datas[4] as? NSDictionary { + if let obj = data[4] as? NSDictionary { println(obj["test"]) } } diff --git a/SwiftIO/SocketEventHandler.swift b/SwiftIO/SocketEventHandler.swift index 3ad2c3f..b65bef0 100644 --- a/SwiftIO/SocketEventHandler.swift +++ b/SwiftIO/SocketEventHandler.swift @@ -24,24 +24,24 @@ class SocketEventHandler { let event:String! - let callback:((data:AnyObject?) -> Void)! - let callbackMult:((data:[AnyObject]) -> Void)! + let callback:NormalCallback! + let callbackMult:MultipleCallback! - init(event:String, callback:((data:AnyObject?) -> Void)) { + init(event:String, callback:NormalCallback) { self.event = event self.callback = callback } - init(event:String, callback:((data:[AnyObject]) -> Void)) { + init(event:String, callback:MultipleCallback) { self.event = event self.callbackMult = callback } - func executeCallback(args:AnyObject?) { - callback(data: args) + func executeCallback(item:AnyObject?) { + callback(item) } - func executeCallback(args:[AnyObject]) { - callbackMult(data: args) + func executeCallback(items:[AnyObject]) { + callbackMult(items) } } \ No newline at end of file diff --git a/SwiftIO/SocketIOClient.swift b/SwiftIO/SocketIOClient.swift index 914f624..e4b8494 100644 --- a/SwiftIO/SocketIOClient.swift +++ b/SwiftIO/SocketIOClient.swift @@ -24,6 +24,9 @@ import Foundation +typealias NormalCallback = (AnyObject?) -> Void +typealias MultipleCallback = (AnyObject...) -> Void + class SocketIOClient: NSObject, SRWebSocketDelegate { let socketURL:String! private let secure:Bool! @@ -190,13 +193,13 @@ class SocketIOClient: NSObject, SRWebSocketDelegate { } // Adds handler for single arg message - func on(name:String, callback:((data:AnyObject?) -> Void)) { + func on(name:String, callback:NormalCallback) { let handler = SocketEventHandler(event: name, callback: callback) self.handlers.append(handler) } // Adds handler for multiple arg message - func onMultipleArgs(name:String, callback:((data:[AnyObject]) -> Void)) { + func onMultipleItems(name:String, callback:MultipleCallback) { let handler = SocketEventHandler(event: name, callback: callback) self.handlers.append(handler) } @@ -463,7 +466,6 @@ class SocketIOClient: NSObject, SRWebSocketDelegate { } } - // Sends ping func sendPing() { if self.connected { self.io?.send("2") @@ -514,7 +516,6 @@ class SocketIOClient: NSObject, SRWebSocketDelegate { // Called when a message is recieved func webSocket(webSocket:SRWebSocket!, didReceiveMessage message:AnyObject?) { - // println(message) self.parseSocketMessage(message: message) } @@ -540,6 +541,7 @@ class SocketIOClient: NSObject, SRWebSocketDelegate { } } + // Called when an error occurs. func webSocket(webSocket:SRWebSocket!, didFailWithError error:NSError!) { self.pingTimer?.invalidate() self.connected = false