From 92367fc796c1e1b4d42903d36f41861c6721118f Mon Sep 17 00:00:00 2001 From: Lukas Schmidt Date: Sun, 2 Aug 2015 18:23:48 +0200 Subject: [PATCH 01/11] minor improvements using let / guard --- SocketIOClientSwift/SocketEngine.swift | 29 +++++++++++++------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/SocketIOClientSwift/SocketEngine.swift b/SocketIOClientSwift/SocketEngine.swift index 6fa37b8..beb790a 100644 --- a/SocketIOClientSwift/SocketEngine.swift +++ b/SocketIOClientSwift/SocketEngine.swift @@ -325,8 +325,8 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient { let req = NSMutableURLRequest(URL: NSURL(string: urlPolling! + "&sid=\(sid)")!) - if cookies != nil { - let headers = NSHTTPCookie.requestHeaderFieldsWithCookies(cookies!) + if let cookies = cookies { + let headers = NSHTTPCookie.requestHeaderFieldsWithCookies(cookies) req.allHTTPHeaderFields = headers } @@ -375,8 +375,8 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient { } private func handleClose() { - if polling { - client?.engineDidClose("Disconnect") + if let client = client where polling == true { + client.engineDidClose("Disconnect") } } @@ -494,8 +494,8 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient { reqPolling.allHTTPHeaderFields = headers } - if extraHeaders != nil { - for (headerName, value) in extraHeaders! { + if let extraHeaders = extraHeaders { + for (headerName, value) in extraHeaders { reqPolling.setValue(value, forHTTPHeaderField: headerName) } } @@ -505,10 +505,9 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient { // Translatation of engine.io-parser#decodePayload private func parsePollingMessage(str:String) { - if str.characters.count == 1 { + guard str.characters.count == 1 else { return } - // println(str) let strArray = Array(str.characters) @@ -633,8 +632,8 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient { postWait.append(strMsg) - if datas != nil { - for data in datas! { + if let datas = datas { + for data in datas { let (_, b64Data) = createBinaryDataForSend(data) postWait.append(b64Data!) @@ -654,8 +653,8 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient { ws?.writeString("\(type.rawValue)\(str)") - if datas != nil { - for data in datas! { + if let datas = datas { + for data in datas { let (data, _) = createBinaryDataForSend(data) if data != nil { ws?.writeData(data!) @@ -666,7 +665,7 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient { // Starts the ping timer private func startPingTimer() { - if pingInterval == nil { + guard pingInterval != nil else { return } @@ -719,8 +718,8 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient { if let pType = PacketType(rawValue: type) { var arr = [NSData]() - if data != nil { - for d in data! { + if let data = data { + for d in data { arr.append(d as! NSData) } } From 7800591367a8fad92a3a899cfc709455aa810d1f Mon Sep 17 00:00:00 2001 From: Lukas Schmidt Date: Sun, 2 Aug 2015 18:47:37 +0200 Subject: [PATCH 02/11] cleanup status api --- SocketIOClientSwift/SocketIOClient.swift | 93 +++++++----------------- SocketIOClientSwift/SocketTypes.swift | 4 + 2 files changed, 31 insertions(+), 66 deletions(-) diff --git a/SocketIOClientSwift/SocketIOClient.swift b/SocketIOClientSwift/SocketIOClient.swift index 2660092..8260eed 100644 --- a/SocketIOClientSwift/SocketIOClient.swift +++ b/SocketIOClientSwift/SocketIOClient.swift @@ -26,14 +26,11 @@ import Foundation public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient { private var anyHandler:((SocketAnyEvent) -> Void)? - private var _closed = false - private var _connected = false - private var _connecting = false + public private(set) var status = SocketIOClientStatus.NotConnected private var currentReconnectAttempt = 0 private var handlers = ContiguousArray() private var connectParams:[String: AnyObject]? private var _secure = false - private var _reconnecting = false private var reconnectTimer:NSTimer? let reconnectAttempts:Int! @@ -48,22 +45,11 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient public let handleAckQueue = dispatch_queue_create("handleAckQueue", DISPATCH_QUEUE_SERIAL) public let handleQueue = dispatch_queue_create("handleQueue", DISPATCH_QUEUE_SERIAL) public let emitQueue = dispatch_queue_create("emitQueue", DISPATCH_QUEUE_SERIAL) - public var closed:Bool { - return _closed - } - public var connected:Bool { - return _connected - } - public var connecting:Bool { - return _connecting - } public var engine:SocketEngine? public var nsp = "/" public var opts:[String: AnyObject]? public var reconnects = true - public var reconnecting:Bool { - return _reconnecting - } + public var reconnectWait = 10 public var secure:Bool { return _secure @@ -145,9 +131,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient SocketLogger.log("Closing socket", client: self) reconnects = false - _connecting = false - _connected = false - _reconnecting = false + status = SocketIOClientStatus.Closed engine?.close(fast: fast) engine = nil } @@ -163,14 +147,14 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient Connect to the server. If we aren't connected after timeoutAfter, call handler */ public func connect(timeoutAfter timeoutAfter:Int, withTimeoutHandler handler:(() -> Void)?) { - if closed { - SocketLogger.log("Warning! This socket was previously closed. This might be dangerous!", client: self) - _closed = false - } else if connected { + guard status == SocketIOClientStatus.Connected else { return } + if status == SocketIOClientStatus.Closed { + SocketLogger.log("Warning! This socket was previously closed. This might be dangerous!", client: self) + } - _connecting = true + status = SocketIOClientStatus.Connecting addEngine() engine?.open(connectParams) @@ -181,9 +165,8 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient let time = dispatch_time(DISPATCH_TIME_NOW, Int64(timeoutAfter) * Int64(NSEC_PER_SEC)) dispatch_after(time, dispatch_get_main_queue()) {[weak self] in - if let this = self where !this.connected { - this._closed = true - this._connecting = false + if let this = self where this.status != SocketIOClientStatus.Connected { + this.status = SocketIOClientStatus.Closed this.engine?.close(fast: true) handler?() @@ -213,11 +196,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient func didConnect() { SocketLogger.log("Socket connected", client: self) - - _closed = false - _connected = true - _connecting = false - _reconnecting = false + status = SocketIOClientStatus.Connected currentReconnectAttempt = 0 clearReconnectTimer() @@ -227,17 +206,15 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient } func didDisconnect(reason:String) { - if closed { + guard status == SocketIOClientStatus.Closed else { return } SocketLogger.log("Disconnected: %@", client: self, args: reason) - _closed = true - _connected = false + status = SocketIOClientStatus.Closed + reconnects = false - _connecting = false - _reconnecting = false // Make sure the engine is actually dead. engine?.close(fast: true) @@ -263,10 +240,9 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient Send a message to the server */ public func emit(event:String, _ items:AnyObject...) { - if !connected { + guard status == SocketIOClientStatus.Connected else { return } - dispatch_async(emitQueue) {[weak self] in self?._emit(event, items) } @@ -276,7 +252,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient Same as emit, but meant for Objective-C */ public func emit(event:String, withItems items:[AnyObject]) { - if !connected { + guard status != SocketIOClientStatus.Connected else { return } @@ -290,10 +266,6 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient an ack. */ public func emitWithAck(event:String, _ items:AnyObject...) -> OnAckCallback { - if !connected { - return createOnAck(event, items: items) - } - return createOnAck(event, items: items) } @@ -301,15 +273,11 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient Same as emitWithAck, but for Objective-C */ public func emitWithAck(event:String, withItems items:[AnyObject]) -> OnAckCallback { - if !connected { - return createOnAck(event, items: items) - } - return createOnAck(event, items: items) } private func _emit(event:String, _ args:[AnyObject], ack:Int? = nil) { - if !connected { + guard status != SocketIOClientStatus.Connected else { return } @@ -328,7 +296,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient // If the server wants to know that the client received data func emitAck(ack:Int, withData args:[AnyObject]) { dispatch_async(emitQueue) {[weak self] in - if let this = self where this.connected { + if let this = self where this.status == SocketIOClientStatus.Connected { let packet = SocketPacket.packetFromEmitAckWithData(args, id: ack ?? -1, nsp: this.nsp) let str = packet.createAck() @@ -345,12 +313,9 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient } public func engineDidClose(reason:String) { - _connected = false - _connecting = false - - if closed || !reconnects { + if status == SocketIOClientStatus.Closed || !reconnects { didDisconnect(reason) - } else if !reconnecting { + } else if status != SocketIOClientStatus.Reconnecting { handleEvent("reconnect", data: [reason], isInternalMessage: true) tryReconnect() } @@ -370,10 +335,10 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient */ public func handleEvent(event:String, data:[AnyObject]?, isInternalMessage:Bool = false, wantsAck ack:Int? = nil) { - // println("Should do event: \(event) with data: \(data)") - if !connected && !isInternalMessage { + guard status != SocketIOClientStatus.Connected && !isInternalMessage else { return } + // println("Should do event: \(event) with data: \(data)") SocketLogger.log("Handling event: %@ with data: %@", client: self, args: event, data ?? "") @@ -467,31 +432,27 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient Trieds to reconnect to the server. */ public func reconnect() { - _connected = false - _connecting = false - _reconnecting = false - + status = SocketIOClientStatus.Reconnecting engine?.stopPolling() tryReconnect() } // We lost connection and should attempt to reestablish @objc private func tryReconnect() { + guard status == SocketIOClientStatus.Connected else { + return + } if reconnectAttempts != -1 && currentReconnectAttempt + 1 > reconnectAttempts || !reconnects { clearReconnectTimer() didDisconnect("Reconnect Failed") - return - } else if connected { - _connecting = false - _reconnecting = false return } if reconnectTimer == nil { SocketLogger.log("Starting reconnect", client: self) - _reconnecting = true + status = SocketIOClientStatus.Reconnecting dispatch_async(dispatch_get_main_queue()) {[weak self] in if let this = self { diff --git a/SocketIOClientSwift/SocketTypes.swift b/SocketIOClientSwift/SocketTypes.swift index 596a267..0009677 100644 --- a/SocketIOClientSwift/SocketTypes.swift +++ b/SocketIOClientSwift/SocketTypes.swift @@ -28,3 +28,7 @@ public typealias AckCallback = (NSArray?) -> Void public typealias AckEmitter = (AnyObject...) -> Void public typealias NormalCallback = (NSArray?, AckEmitter?) -> Void public typealias OnAckCallback = (timeout:UInt64, callback:AckCallback) -> Void + +public enum SocketIOClientStatus { + case NotConnected, Closed, Connecting, Connected, Reconnecting +} From 969e6d6ea84364f25a38139ae6c0c2a1ce6675c2 Mon Sep 17 00:00:00 2001 From: Lukas Schmidt Date: Wed, 5 Aug 2015 12:12:21 +0200 Subject: [PATCH 03/11] minor imporvements Signed-off-by: Lukas Schmidt --- SocketIOClientSwift/SocketIOClient.swift | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/SocketIOClientSwift/SocketIOClient.swift b/SocketIOClientSwift/SocketIOClient.swift index 8260eed..ba17752 100644 --- a/SocketIOClientSwift/SocketIOClient.swift +++ b/SocketIOClientSwift/SocketIOClient.swift @@ -30,7 +30,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient private var currentReconnectAttempt = 0 private var handlers = ContiguousArray() private var connectParams:[String: AnyObject]? - private var _secure = false + public private(set) var secure = false private var reconnectTimer:NSTimer? let reconnectAttempts:Int! @@ -51,9 +51,6 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient public var reconnects = true public var reconnectWait = 10 - public var secure:Bool { - return _secure - } public var sid:String? { return engine?.sid } @@ -63,7 +60,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient */ public init(var socketURL:String, opts:[String: AnyObject]? = nil) { if socketURL["https://"].matches().count != 0 { - self._secure = true + self.secure = true } socketURL = socketURL["http://"] ~= "" @@ -158,7 +155,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient addEngine() engine?.open(connectParams) - if timeoutAfter == 0 { + guard timeoutAfter == 0 else { return } @@ -379,6 +376,14 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient } } + /** + Joins namespace / + */ + public func joinNamespace(namespace:String) { + self.nsp = namespace + joinNamespace() + } + /** Removes handler(s) */ From d0ec1de56680c58f15f647b4bc42a4616767415c Mon Sep 17 00:00:00 2001 From: Lukas Schmidt Date: Mon, 10 Aug 2015 06:18:37 +0200 Subject: [PATCH 04/11] merge Signed-off-by: Lukas Schmidt --- SocketIOClientSwift/SocketIOClient.swift | 94 +----------------------- 1 file changed, 4 insertions(+), 90 deletions(-) diff --git a/SocketIOClientSwift/SocketIOClient.swift b/SocketIOClientSwift/SocketIOClient.swift index 5c0ec43..3707968 100644 --- a/SocketIOClientSwift/SocketIOClient.swift +++ b/SocketIOClientSwift/SocketIOClient.swift @@ -29,16 +29,11 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient public private(set) var status = SocketIOClientStatus.NotConnected private var currentReconnectAttempt = 0 private var handlers = ContiguousArray() -<<<<<<< HEAD - private var connectParams:[String: AnyObject]? public private(set) var secure = false - private var reconnectTimer:NSTimer? -======= private var connectParams: [String: AnyObject]? private var _secure = false private var _reconnecting = false private var reconnectTimer: NSTimer? ->>>>>>> 514193e6ec46854097ead71c4b3efde292915938 let reconnectAttempts: Int! let logType = "SocketClient" @@ -51,36 +46,13 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient public let handleAckQueue = dispatch_queue_create("handleAckQueue", DISPATCH_QUEUE_SERIAL) public let handleQueue: dispatch_queue_t! public let emitQueue = dispatch_queue_create("emitQueue", DISPATCH_QUEUE_SERIAL) -<<<<<<< HEAD -======= - public var closed: Bool { - return _closed - } - public var connected: Bool { - return _connected - } - public var connecting: Bool { - return _connecting - } ->>>>>>> 514193e6ec46854097ead71c4b3efde292915938 + public var engine:SocketEngine? public var nsp = "/" public var opts: [String: AnyObject]? public var reconnects = true -<<<<<<< HEAD - public var reconnectWait = 10 public var sid:String? { -======= - public var reconnecting: Bool { - return _reconnecting - } - public var reconnectWait = 10 - public var secure: Bool { - return _secure - } - public var sid: String? { ->>>>>>> 514193e6ec46854097ead71c4b3efde292915938 return engine?.sid } @@ -173,16 +145,9 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient /** Connect to the server. If we aren't connected after timeoutAfter, call handler */ -<<<<<<< HEAD - public func connect(timeoutAfter timeoutAfter:Int, withTimeoutHandler handler:(() -> Void)?) { + public func connect(timeoutAfter timeoutAfter:Int, + withTimeoutHandler handler:(() -> Void)?) { guard status == SocketIOClientStatus.Connected else { -======= - public func connect(timeoutAfter timeoutAfter: Int, withTimeoutHandler handler: (() -> Void)?) { - if closed { - SocketLogger.log("Warning! This socket was previously closed. This might be dangerous!", client: self) - _closed = false - } else if connected { ->>>>>>> 514193e6ec46854097ead71c4b3efde292915938 return } if status == SocketIOClientStatus.Closed { @@ -240,13 +205,8 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient handleEvent("connect", data: nil, isInternalMessage: false) } -<<<<<<< HEAD func didDisconnect(reason:String) { guard status == SocketIOClientStatus.Closed else { -======= - func didDisconnect(reason: String) { - if closed { ->>>>>>> 514193e6ec46854097ead71c4b3efde292915938 return } @@ -279,13 +239,8 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient /** Send a message to the server */ -<<<<<<< HEAD public func emit(event:String, _ items:AnyObject...) { guard status == SocketIOClientStatus.Connected else { -======= - public func emit(event:String, _ items: AnyObject...) { - if !connected { ->>>>>>> 514193e6ec46854097ead71c4b3efde292915938 return } dispatch_async(emitQueue) {[weak self] in @@ -296,13 +251,8 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient /** Same as emit, but meant for Objective-C */ -<<<<<<< HEAD public func emit(event:String, withItems items:[AnyObject]) { guard status != SocketIOClientStatus.Connected else { -======= - public func emit(event: String, withItems items: [AnyObject]) { - if !connected { ->>>>>>> 514193e6ec46854097ead71c4b3efde292915938 return } @@ -315,40 +265,19 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient Sends a message to the server, requesting an ack. Use the onAck method of SocketAckHandler to add an ack. */ -<<<<<<< HEAD public func emitWithAck(event:String, _ items:AnyObject...) -> OnAckCallback { -======= - public func emitWithAck(event: String, _ items: AnyObject...) -> OnAckCallback { - if !connected { - return createOnAck(event, items: items) - } - ->>>>>>> 514193e6ec46854097ead71c4b3efde292915938 return createOnAck(event, items: items) } /** Same as emitWithAck, but for Objective-C */ -<<<<<<< HEAD public func emitWithAck(event:String, withItems items:[AnyObject]) -> OnAckCallback { return createOnAck(event, items: items) } private func _emit(event:String, _ args:[AnyObject], ack:Int? = nil) { guard status != SocketIOClientStatus.Connected else { -======= - public func emitWithAck(event: String, withItems items: [AnyObject]) -> OnAckCallback { - if !connected { - return createOnAck(event, items: items) - } - - return createOnAck(event, items: items) - } - - private func _emit(event: String, _ args: [AnyObject], ack: Int? = nil) { - if !connected { ->>>>>>> 514193e6ec46854097ead71c4b3efde292915938 return } @@ -383,16 +312,8 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient } } -<<<<<<< HEAD public func engineDidClose(reason:String) { if status == SocketIOClientStatus.Closed || !reconnects { -======= - public func engineDidClose(reason: String) { - _connected = false - _connecting = false - - if closed || !reconnects { ->>>>>>> 514193e6ec46854097ead71c4b3efde292915938 didDisconnect(reason) } else if status != SocketIOClientStatus.Reconnecting { handleEvent("reconnect", data: [reason], isInternalMessage: true) @@ -412,16 +333,9 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient /** Causes an event to be handled. Only use if you know what you're doing. */ -<<<<<<< HEAD public func handleEvent(event:String, data:[AnyObject]?, isInternalMessage:Bool = false, wantsAck ack:Int? = nil) { guard status != SocketIOClientStatus.Connected && !isInternalMessage else { -======= - public func handleEvent(event: String, data: [AnyObject]?, isInternalMessage: Bool = false, - wantsAck ack: Int? = nil) { - // println("Should do event: \(event) with data: \(data)") - if !connected && !isInternalMessage { ->>>>>>> 514193e6ec46854097ead71c4b3efde292915938 return } // println("Should do event: \(event) with data: \(data)") @@ -436,7 +350,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient } for handler in handlers where handler.event == event { - if ack != nil { + if let ack = ack { dispatch_async(handleQueue) {[weak self] in handler.executeCallback(data, withAck: ack!, withSocket: self) } From 184b97ef8c1b0308468ea6b6da2c8451bad5d925 Mon Sep 17 00:00:00 2001 From: Lukas Schmidt Date: Mon, 10 Aug 2015 06:21:29 +0200 Subject: [PATCH 05/11] fix merge issues Signed-off-by: Lukas Schmidt --- SocketIOClientSwift/SocketIOClient.swift | 2 +- SocketIOClientSwift/SocketTypes.swift | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/SocketIOClientSwift/SocketIOClient.swift b/SocketIOClientSwift/SocketIOClient.swift index 3707968..ad37d8d 100644 --- a/SocketIOClientSwift/SocketIOClient.swift +++ b/SocketIOClientSwift/SocketIOClient.swift @@ -352,7 +352,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient for handler in handlers where handler.event == event { if let ack = ack { dispatch_async(handleQueue) {[weak self] in - handler.executeCallback(data, withAck: ack!, withSocket: self) + handler.executeCallback(data, withAck: ack, withSocket: self) } } else { dispatch_async(handleQueue) { diff --git a/SocketIOClientSwift/SocketTypes.swift b/SocketIOClientSwift/SocketTypes.swift index f938e20..8ced279 100644 --- a/SocketIOClientSwift/SocketTypes.swift +++ b/SocketIOClientSwift/SocketTypes.swift @@ -27,6 +27,7 @@ import Foundation public typealias AckCallback = (NSArray?) -> Void public typealias AckEmitter = (AnyObject...) -> Void public typealias AckEmitterObjectiveC = (NSArray) -> Void +public typealias NormalCallback = (NSArray?, AckEmitter?) -> Void public typealias NormalCallbackObjectiveC = (NSArray?, AckEmitterObjectiveC?) -> Void public typealias OnAckCallback = (timeoutAfter:UInt64, callback:AckCallback) -> Void From 84bb6b7dad84479d9ff82ce852499a70c601b6d0 Mon Sep 17 00:00:00 2001 From: Lukas Schmidt Date: Mon, 10 Aug 2015 06:33:32 +0200 Subject: [PATCH 06/11] update tests Signed-off-by: Lukas Schmidt --- SocketIO-iOSTests/AbstractSocketTest.swift | 8 +++----- SocketIO-iOSTests/SocketTestCases.swift | 4 ++-- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/SocketIO-iOSTests/AbstractSocketTest.swift b/SocketIO-iOSTests/AbstractSocketTest.swift index 5f66991..e5b16d5 100644 --- a/SocketIO-iOSTests/AbstractSocketTest.swift +++ b/SocketIO-iOSTests/AbstractSocketTest.swift @@ -20,11 +20,12 @@ class AbstractSocketTest: XCTestCase { func openConnection() { let expection = self.expectationWithDescription("connect") + XCTAssertTrue(socket.status == SocketIOClientStatus.NotConnected) socket.on("connect") {data, ack in expection.fulfill() } socket.connect() - XCTAssertTrue(socket.connecting) + XCTAssertEqual(socket.status, SocketIOClientStatus.Connecting) waitForExpectationsWithTimeout(AbstractSocketTest.TEST_TIMEOUT, handler: nil) } @@ -33,10 +34,7 @@ class AbstractSocketTest: XCTestCase { } func checkConnectionStatus() { - XCTAssertTrue(socket.connected) - XCTAssertFalse(socket.connecting) - XCTAssertFalse(socket.reconnecting) - XCTAssertFalse(socket.closed) + XCTAssertEqual(socket.status, SocketIOClientStatus.Connected) XCTAssertFalse(socket.secure) } diff --git a/SocketIO-iOSTests/SocketTestCases.swift b/SocketIO-iOSTests/SocketTestCases.swift index e17718e..617fb13 100644 --- a/SocketIO-iOSTests/SocketTestCases.swift +++ b/SocketIO-iOSTests/SocketTestCases.swift @@ -52,8 +52,8 @@ class SocketTestCases: NSObject { func didGetResult(result:NSArray?, ack:AckEmitter?) { if let array = result?.firstObject as? NSArray { XCTAssertEqual(array.count, 2) - XCTAssertEqual(array.firstObject! as! String, "test3") - XCTAssertEqual(array.lastObject! as! String, "test4") + XCTAssertEqual((array.firstObject! as! String), "test3") + XCTAssertEqual((array.lastObject! as! String), "test4") }else { XCTFail("Should have NSArray as result") } From 5eeac96b2bfa6408a9a8dbb69261781c839a2085 Mon Sep 17 00:00:00 2001 From: Lukas Schmidt Date: Mon, 10 Aug 2015 07:04:11 +0200 Subject: [PATCH 07/11] fix issues Signed-off-by: Lukas Schmidt --- SocketIOClientSwift/SocketEngine.swift | 2 +- SocketIOClientSwift/SocketIOClient.swift | 21 ++++++++------------- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/SocketIOClientSwift/SocketEngine.swift b/SocketIOClientSwift/SocketEngine.swift index e3dfb6c..a375844 100644 --- a/SocketIOClientSwift/SocketEngine.swift +++ b/SocketIOClientSwift/SocketEngine.swift @@ -505,7 +505,7 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient { // Translatation of engine.io-parser#decodePayload private func parsePollingMessage(str:String) { - guard str.characters.count == 1 else { + guard str.characters.count != 1 else { return } // println(str) diff --git a/SocketIOClientSwift/SocketIOClient.swift b/SocketIOClientSwift/SocketIOClient.swift index ad37d8d..4d10186 100644 --- a/SocketIOClientSwift/SocketIOClient.swift +++ b/SocketIOClientSwift/SocketIOClient.swift @@ -147,7 +147,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient */ public func connect(timeoutAfter timeoutAfter:Int, withTimeoutHandler handler:(() -> Void)?) { - guard status == SocketIOClientStatus.Connected else { + guard status != SocketIOClientStatus.Connected else { return } if status == SocketIOClientStatus.Closed { @@ -158,7 +158,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient addEngine() engine?.open(connectParams) - guard timeoutAfter == 0 else { + guard timeoutAfter == 0 else { return } @@ -206,7 +206,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient } func didDisconnect(reason:String) { - guard status == SocketIOClientStatus.Closed else { + guard status != SocketIOClientStatus.Closed else { return } @@ -240,19 +240,14 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient Send a message to the server */ public func emit(event:String, _ items:AnyObject...) { - guard status == SocketIOClientStatus.Connected else { - return - } - dispatch_async(emitQueue) {[weak self] in - self?._emit(event, items) - } + emit(event, withItems: items) } /** Same as emit, but meant for Objective-C */ public func emit(event:String, withItems items:[AnyObject]) { - guard status != SocketIOClientStatus.Connected else { + guard status == SocketIOClientStatus.Connected else { return } @@ -277,7 +272,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient } private func _emit(event:String, _ args:[AnyObject], ack:Int? = nil) { - guard status != SocketIOClientStatus.Connected else { + guard status == SocketIOClientStatus.Connected else { return } @@ -335,7 +330,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient */ public func handleEvent(event:String, data:[AnyObject]?, isInternalMessage:Bool = false, wantsAck ack:Int? = nil) { - guard status != SocketIOClientStatus.Connected && !isInternalMessage else { + guard status == SocketIOClientStatus.Connected && isInternalMessage else { return } // println("Should do event: \(event) with data: \(data)") @@ -460,7 +455,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient } @objc private func tryReconnect() { - guard status == SocketIOClientStatus.Connected else { + guard status != SocketIOClientStatus.Connected else { return } if reconnectAttempts != -1 && currentReconnectAttempt + 1 > reconnectAttempts || !reconnects { From 6fa76362616d350e032d13f61547c76288086973 Mon Sep 17 00:00:00 2001 From: Lukas Schmidt Date: Mon, 10 Aug 2015 07:14:52 +0200 Subject: [PATCH 08/11] working test Signed-off-by: Lukas Schmidt --- SocketIOClientSwift/SocketIOClient.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SocketIOClientSwift/SocketIOClient.swift b/SocketIOClientSwift/SocketIOClient.swift index 4d10186..2249698 100644 --- a/SocketIOClientSwift/SocketIOClient.swift +++ b/SocketIOClientSwift/SocketIOClient.swift @@ -158,7 +158,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient addEngine() engine?.open(connectParams) - guard timeoutAfter == 0 else { + guard timeoutAfter != 0 else { return } @@ -330,7 +330,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient */ public func handleEvent(event:String, data:[AnyObject]?, isInternalMessage:Bool = false, wantsAck ack:Int? = nil) { - guard status == SocketIOClientStatus.Connected && isInternalMessage else { + guard status == SocketIOClientStatus.Connected && !isInternalMessage else { return } // println("Should do event: \(event) with data: \(data)") From 889ad404bc43c9addf0ac4fef31115a60f6e14bc Mon Sep 17 00:00:00 2001 From: Lukas Schmidt Date: Mon, 10 Aug 2015 07:42:09 +0200 Subject: [PATCH 09/11] remove compiler warnings --- SocketIO-iOSTests/SocketTestCases.swift | 26 ++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/SocketIO-iOSTests/SocketTestCases.swift b/SocketIO-iOSTests/SocketTestCases.swift index 617fb13..b090e7d 100644 --- a/SocketIO-iOSTests/SocketTestCases.swift +++ b/SocketIO-iOSTests/SocketTestCases.swift @@ -113,10 +113,10 @@ class SocketTestCases: NSObject { let testName = "testJSONWithBuffer" func didGetResult(result:NSArray?, ack:AckEmitter?) { if let json = result?.firstObject as? NSDictionary { - XCTAssertEqual(json.valueForKey("testString")! as! String, "test") - XCTAssertEqual(json.valueForKey("testNumber")! as! Int, 15) + XCTAssertEqual((json.valueForKey("testString")! as! String), "test") + XCTAssertEqual((json.valueForKey("testNumber")! as! Int), 15) XCTAssertEqual((json.valueForKey("testArray")! as! Array).count, 2) - XCTAssertEqual((json.valueForKey("testArray")! as! Array).last! as! Int, 1) + XCTAssertEqual(((json.valueForKey("testArray")! as! Array).last! as! Int), 1) let string = NSString(data: (json.valueForKey("testArray")! as! Array).first! as! NSData, encoding: NSUTF8StringEncoding)! XCTAssertEqual(string, "gakgakgak2") }else { @@ -132,11 +132,11 @@ class SocketTestCases: NSObject { let testName = "testJSON" func didGetResult(result:NSArray?, ack:AckEmitter?) { if let json = result?.firstObject as? NSDictionary { - XCTAssertEqual(json.valueForKey("testString")! as! String, "test") - XCTAssertEqual(json.valueForKey("testNumber")! as! Int, 15) + XCTAssertEqual((json.valueForKey("testString")! as! String), "test") + XCTAssertEqual(json.valueForKey("testNumber")! as? Int, 15) XCTAssertEqual((json.valueForKey("testArray")! as! Array).count, 2) - XCTAssertEqual((json.valueForKey("testArray")! as! Array).first! as! Int, 1) - XCTAssertEqual((json.valueForKey("testArray")! as! Array).last! as! Int, 1) + XCTAssertEqual((json.valueForKey("testArray")! as! Array).first! as? Int, 1) + XCTAssertEqual((json.valueForKey("testArray")! as! Array).last! as? Int, 1) }else { XCTFail("Should have NSDictionary as result") @@ -168,13 +168,13 @@ class SocketTestCases: NSObject { return } if let array = result?.firstObject as? Array { - XCTAssertEqual(array.last! as! Int, 2) - XCTAssertEqual(array.first! as! Int, 1) + XCTAssertEqual((array.last! as! Int), 2) + XCTAssertEqual((array.first! as! Int), 1) }else { XCTFail("Should have Array as result") } if let dict = result?[1] as? NSDictionary { - XCTAssertEqual(dict.valueForKey("test") as! String, "bob") + XCTAssertEqual((dict.valueForKey("test") as! String), "bob") }else { XCTFail("Should have NSDictionary as result") @@ -212,13 +212,13 @@ class SocketTestCases: NSObject { return } if let array = result?.firstObject as? Array { - XCTAssertEqual(array.last! as! Int, 2) - XCTAssertEqual(array.first! as! Int, 1) + XCTAssertEqual((array.last! as! Int), 2) + XCTAssertEqual((array.first! as! Int), 1) }else { XCTFail("Should have Array as result") } if let dict = result?[1] as? NSDictionary { - XCTAssertEqual(dict.valueForKey("test") as! String, "bob") + XCTAssertEqual((dict.valueForKey("test") as! String), "bob") }else { XCTFail("Should have NSDictionary as result") From d0f091e9831d895cdd314e103d8644e1e7b0ab3b Mon Sep 17 00:00:00 2001 From: Lukas Schmidt Date: Mon, 10 Aug 2015 07:44:01 +0200 Subject: [PATCH 10/11] remove unused variables --- SocketIOClientSwift/SocketIOClient.swift | 2 -- 1 file changed, 2 deletions(-) diff --git a/SocketIOClientSwift/SocketIOClient.swift b/SocketIOClientSwift/SocketIOClient.swift index 2249698..218d900 100644 --- a/SocketIOClientSwift/SocketIOClient.swift +++ b/SocketIOClientSwift/SocketIOClient.swift @@ -31,8 +31,6 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient private var handlers = ContiguousArray() public private(set) var secure = false private var connectParams: [String: AnyObject]? - private var _secure = false - private var _reconnecting = false private var reconnectTimer: NSTimer? let reconnectAttempts: Int! From 25464ffb9de4a80c15b4c60eb0ff858c60b4bace Mon Sep 17 00:00:00 2001 From: Lukas Schmidt Date: Mon, 10 Aug 2015 15:47:59 +0200 Subject: [PATCH 11/11] objc suppoert --- SocketIOClientSwift/SocketTypes.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SocketIOClientSwift/SocketTypes.swift b/SocketIOClientSwift/SocketTypes.swift index 8ced279..263653f 100644 --- a/SocketIOClientSwift/SocketTypes.swift +++ b/SocketIOClientSwift/SocketTypes.swift @@ -32,6 +32,7 @@ public typealias NormalCallbackObjectiveC = (NSArray?, AckEmitterObjectiveC?) -> public typealias OnAckCallback = (timeoutAfter:UInt64, callback:AckCallback) -> Void -public enum SocketIOClientStatus { +@objc public enum SocketIOClientStatus: Int { case NotConnected, Closed, Connecting, Connected, Reconnecting + }