Fix memory leak. Add reconnect method
This commit is contained in:
parent
8a23960e20
commit
1aa1a83cea
@ -121,7 +121,8 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient {
|
|||||||
|
|
||||||
self.write("", withType: PacketType.CLOSE, withData: nil)
|
self.write("", withType: PacketType.CLOSE, withData: nil)
|
||||||
self.ws?.disconnect()
|
self.ws?.disconnect()
|
||||||
|
self.stopPolling()
|
||||||
|
|
||||||
if fast || self.polling {
|
if fast || self.polling {
|
||||||
self.client?.engineDidClose("Disconnect")
|
self.client?.engineDidClose("Disconnect")
|
||||||
}
|
}
|
||||||
@ -252,7 +253,7 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient {
|
|||||||
SocketLogger.log("Got polling response", client: self!)
|
SocketLogger.log("Got polling response", client: self!)
|
||||||
|
|
||||||
if let str = NSString(data: data, encoding: NSUTF8StringEncoding) as? String {
|
if let str = NSString(data: data, encoding: NSUTF8StringEncoding) as? String {
|
||||||
dispatch_async(self!.parseQueue) {
|
dispatch_async(self!.parseQueue) {[weak self] in
|
||||||
self?.parsePollingMessage(str)
|
self?.parsePollingMessage(str)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -337,7 +338,7 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
self?.waitingForPost = false
|
self?.waitingForPost = false
|
||||||
dispatch_async(self!.emitQueue) {
|
dispatch_async(self!.emitQueue) {[weak self] in
|
||||||
if !self!.fastUpgrade {
|
if !self!.fastUpgrade {
|
||||||
self?.flushWaitingForPost()
|
self?.flushWaitingForPost()
|
||||||
self?.doPoll()
|
self?.doPoll()
|
||||||
@ -363,7 +364,8 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient {
|
|||||||
self.waitingForPoll = false
|
self.waitingForPoll = false
|
||||||
self.waitingForPost = false
|
self.waitingForPost = false
|
||||||
|
|
||||||
if self.client == nil {
|
// If cancelled we were already closing
|
||||||
|
if self.client == nil || reason == "cancelled" {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -445,7 +447,7 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient {
|
|||||||
|
|
||||||
if let lengthInt = length.toInt() {
|
if let lengthInt = length.toInt() {
|
||||||
if lengthInt != msg.length {
|
if lengthInt != msg.length {
|
||||||
NSLog("parsing error: \(str)")
|
SocketLogger.err("parsing error: \(str)", client: self)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -630,13 +632,21 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.pingTimer?.invalidate()
|
self.pingTimer?.invalidate()
|
||||||
dispatch_async(dispatch_get_main_queue()) {
|
dispatch_async(dispatch_get_main_queue()) {[weak self] in
|
||||||
self.pingTimer = NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(self.pingInterval!),
|
if self == nil {
|
||||||
target: self,
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
self?.pingTimer = NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(self!.pingInterval!),
|
||||||
|
target: self!,
|
||||||
selector: Selector("sendPing"), userInfo: nil, repeats: true)
|
selector: Selector("sendPing"), userInfo: nil, repeats: true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func stopPolling() {
|
||||||
|
self.session.invalidateAndCancel()
|
||||||
|
}
|
||||||
|
|
||||||
private func upgradeTransport() {
|
private func upgradeTransport() {
|
||||||
if self.websocketConnected {
|
if self.websocketConnected {
|
||||||
SocketLogger.log("Upgrading transport to WebSockets", client: self)
|
SocketLogger.log("Upgrading transport to WebSockets", client: self)
|
||||||
|
|||||||
@ -153,6 +153,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient
|
|||||||
self._connected = false
|
self._connected = false
|
||||||
self._reconnecting = false
|
self._reconnecting = false
|
||||||
self.engine?.close(fast: fast)
|
self.engine?.close(fast: fast)
|
||||||
|
self.engine = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -454,8 +455,20 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient
|
|||||||
SocketParser.parseBinaryData(data, socket: self)
|
SocketParser.parseBinaryData(data, socket: self)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Trieds to reconnect to the server.
|
||||||
|
*/
|
||||||
|
public func reconnect() {
|
||||||
|
self._connected = false
|
||||||
|
self._connecting = false
|
||||||
|
self._reconnecting = false
|
||||||
|
|
||||||
|
self.engine?.stopPolling()
|
||||||
|
self.tryReconnect()
|
||||||
|
}
|
||||||
|
|
||||||
// We lost connection and should attempt to reestablish
|
// We lost connection and should attempt to reestablish
|
||||||
func tryReconnect() {
|
@objc private func tryReconnect() {
|
||||||
if self.reconnectAttempts != -1 && self.currentReconnectAttempt + 1 > self.reconnectAttempts {
|
if self.reconnectAttempts != -1 && self.currentReconnectAttempt + 1 > self.reconnectAttempts {
|
||||||
self.didDisconnect("Reconnect Failed")
|
self.didDisconnect("Reconnect Failed")
|
||||||
return
|
return
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user