From b919d3e41113c2bb27158c50b1789ea001d29059 Mon Sep 17 00:00:00 2001 From: Erik Date: Tue, 7 Jun 2016 13:12:34 -0400 Subject: [PATCH] hopefully fix socket.io/socket.io-client-swift#374 --- Source/SocketEngine.swift | 45 +++++++++++++++++-------------- Source/SocketEnginePollable.swift | 2 +- 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/Source/SocketEngine.swift b/Source/SocketEngine.swift index 92843e5..5572bf8 100644 --- a/Source/SocketEngine.swift +++ b/Source/SocketEngine.swift @@ -163,6 +163,16 @@ public final class SocketEngine : NSObject, SocketEnginePollable, SocketEngineWe } } + private func closeOutSocket() { + sid = "" + closed = true + invalidated = true + connected = false + + ws?.disconnect() + stopPolling() + } + /// Starts the connection to the server public func connect() { if connected { @@ -266,37 +276,32 @@ public final class SocketEngine : NSObject, SocketEnginePollable, SocketEngineWe } public func disconnect(reason: String) { - func postSendClose(data: NSData?, _ res: NSURLResponse?, _ err: NSError?) { - sid = "" - closed = true - invalidated = true - connected = false - - ws?.disconnect() - stopPolling() - } - - guard connected else { return postSendClose(nil, nil, nil) } + guard connected else { return closeOutSocket() } DefaultSocketLogger.Logger.log("Engine is being closed.", type: logType) if closed { - postSendClose(nil, nil, nil) + closeOutSocket() client?.engineDidClose(reason) return } if websocket { sendWebSocketMessage("", withType: .Close, withData: []) - postSendClose(nil, nil, nil) + closeOutSocket() } else { - // We need to take special care when we're polling that we send it ASAP - // Also make sure we're on the emitQueue since we're touching postWait - dispatch_sync(emitQueue) { - self.postWait.append(String(SocketEnginePacketType.Close.rawValue)) - let req = self.createRequestForPostWithPostWait() - self.doRequest(req, withCallback: postSendClose) - } + disconnectPolling() + } + } + + // We need to take special care when we're polling that we send it ASAP + // Also make sure we're on the emitQueue since we're touching postWait + private func disconnectPolling() { + dispatch_sync(emitQueue) { + self.postWait.append(String(SocketEnginePacketType.Close.rawValue)) + let req = self.createRequestForPostWithPostWait() + self.doRequest(req) {_, _, _ in } + self.closeOutSocket() } } diff --git a/Source/SocketEnginePollable.swift b/Source/SocketEnginePollable.swift index 3d400cf..e8d1718 100644 --- a/Source/SocketEnginePollable.swift +++ b/Source/SocketEnginePollable.swift @@ -123,7 +123,7 @@ extension SocketEnginePollable { return } - + DefaultSocketLogger.Logger.log("Got polling response", type: "SocketEnginePolling") if let str = String(data: data!, encoding: NSUTF8StringEncoding) {