diff --git a/Source/SocketEngine.swift b/Source/SocketEngine.swift index 857e6d8..add2f02 100644 --- a/Source/SocketEngine.swift +++ b/Source/SocketEngine.swift @@ -198,7 +198,9 @@ public final class SocketEngine : NSObject, SocketEnginePollable, SocketEngineWe } } - doLongPoll(reqPolling) + dispatch_async(emitQueue) { + self.doLongPoll(reqPolling) + } } private func createURLs() -> (NSURL, NSURL) { @@ -280,7 +282,8 @@ public final class SocketEngine : NSObject, SocketEnginePollable, SocketEngineWe DefaultSocketLogger.Logger.log("Engine is being closed.", type: logType) if closed { - return postSendClose(nil, nil, nil) + client?.engineDidClose(reason) + return } if websocket { diff --git a/Source/SocketEnginePollable.swift b/Source/SocketEnginePollable.swift index c419e51..70a9e56 100644 --- a/Source/SocketEnginePollable.swift +++ b/Source/SocketEnginePollable.swift @@ -105,6 +105,7 @@ extension SocketEnginePollable { return } + DefaultSocketLogger.Logger.log("Doing polling request", type: "SocketEnginePolling") session?.dataTaskWithRequest(req, completionHandler: callback).resume() diff --git a/Source/SocketIOClient.swift b/Source/SocketIOClient.swift index 99fa5f8..02cda38 100644 --- a/Source/SocketIOClient.swift +++ b/Source/SocketIOClient.swift @@ -131,8 +131,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable assert(timeoutAfter >= 0, "Invalid timeout: \(timeoutAfter)") guard status != .Connected else { - DefaultSocketLogger.Logger.log("Tried connecting on an already connected socket", - type: logType) + DefaultSocketLogger.Logger.log("Tried connecting on an already connected socket", type: logType) return } @@ -149,8 +148,8 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable let time = dispatch_time(DISPATCH_TIME_NOW, Int64(timeoutAfter) * Int64(NSEC_PER_SEC)) dispatch_after(time, handleQueue) {[weak self] in - if let this = self where this.status != .Connected && this.status != .Closed { - this.status = .Closed + if let this = self where this.status != .Connected && this.status != .Disconnected { + this.status = .Disconnected this.engine?.disconnect("Connect timeout") handler?() @@ -187,11 +186,11 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable } func didDisconnect(reason: String) { - guard status != .Closed else { return } + guard status != .Disconnected else { return } DefaultSocketLogger.Logger.log("Disconnected: %@", type: logType, args: reason) - status = .Closed + status = .Disconnected reconnects = false // Make sure the engine is actually dead. @@ -202,6 +201,8 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable /// Disconnects the socket. Only reconnect the same socket if you know what you're doing. /// Will turn off automatic reconnects. public func disconnect() { + assert(status != .NotConnected, "Tried closing a NotConnected client") + DefaultSocketLogger.Logger.log("Closing socket", type: logType) reconnects = false @@ -267,11 +268,11 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable public func engineDidClose(reason: String) { waitingPackets.removeAll() - if status != .Closed { + if status != .Disconnected { status = .NotConnected } - if status == .Closed || !reconnects { + if status == .Disconnected || !reconnects { didDisconnect(reason) } else if !reconnecting { reconnecting = true diff --git a/Source/SocketIOClientStatus.swift b/Source/SocketIOClientStatus.swift index 09626b8..3d39e4a 100644 --- a/Source/SocketIOClientStatus.swift +++ b/Source/SocketIOClientStatus.swift @@ -24,19 +24,8 @@ import Foundation -@objc public enum SocketIOClientStatus : Int, CustomStringConvertible { - case NotConnected, Closed, Connecting, Connected - - public var description: String { - switch self { - case NotConnected: - return "Not Connected" - case Closed: - return "Closed" - case Connecting: - return "Connecting" - case Connected: - return "Connected" - } - } +@objc public enum SocketIOClientStatus : Int { + // NotConnected: initial state + // Disconnected: connected before + case NotConnected, Disconnected, Connecting, Connected } \ No newline at end of file