always close fast. Don't handle acks after close

This commit is contained in:
Erik 2015-10-19 16:40:09 -04:00
parent ea7e60cde2
commit 02971e14c2
3 changed files with 14 additions and 11 deletions

View File

@ -102,19 +102,20 @@ public final class SocketEngine: NSObject, SocketEngineSpec, WebSocketDelegate {
} }
} }
public func close(fast fast: Bool) { public func close() {
Logger.log("Engine is being closed. Fast: %@", type: logType, args: fast) Logger.log("Engine is being closed.", type: logType)
pingTimer?.invalidate() pingTimer?.invalidate()
closed = true closed = true
ws?.disconnect() if websocket {
sendWebSocketMessage("", withType: .Close)
if fast || polling { } else {
write("", withType: .Close, withData: nil) sendPollMessage("", withType: .Close)
client?.engineDidClose("Disconnect")
} }
ws?.disconnect()
client?.engineDidClose("Disconnect")
stopPolling() stopPolling()
} }

View File

@ -35,7 +35,7 @@ import Foundation
init(client: SocketEngineClient, opts: NSDictionary?) init(client: SocketEngineClient, opts: NSDictionary?)
func close(fast fast: Bool) func close()
func open(opts: [String: AnyObject]?) func open(opts: [String: AnyObject]?)
func send(msg: String, withData datas: [NSData]?) func send(msg: String, withData datas: [NSData]?)
func write(msg: String, withType type: SocketEnginePacketType, withData data: [NSData]?) func write(msg: String, withType type: SocketEnginePacketType, withData data: [NSData]?)

View File

@ -169,7 +169,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient {
dispatch_after(time, handleQueue) {[weak self] in dispatch_after(time, handleQueue) {[weak self] in
if let this = self where this.status != .Connected { if let this = self where this.status != .Connected {
this.status = .Closed this.status = .Closed
this.engine?.close(fast: true) this.engine?.close()
handler?() handler?()
} }
@ -218,7 +218,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient {
reconnects = false reconnects = false
// Make sure the engine is actually dead. // Make sure the engine is actually dead.
engine?.close(fast: true) engine?.close()
handleEvent("disconnect", data: [reason], isInternalMessage: true) handleEvent("disconnect", data: [reason], isInternalMessage: true)
} }
@ -322,6 +322,8 @@ public final class SocketIOClient: NSObject, SocketEngineClient {
// Called when the socket gets an ack for something it sent // Called when the socket gets an ack for something it sent
func handleAck(ack: Int, data: AnyObject?) { func handleAck(ack: Int, data: AnyObject?) {
guard status == .Connected else {return}
Logger.log("Handling ack: %@ with data: %@", type: logType, args: ack, data ?? "") Logger.log("Handling ack: %@ with data: %@", type: logType, args: ack, data ?? "")
ackHandlers.executeAck(ack, ackHandlers.executeAck(ack,