clean up engineclient
This commit is contained in:
parent
21b295f8fa
commit
0416ecbaac
@ -110,6 +110,8 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient {
|
||||
}
|
||||
|
||||
public func close(#fast:Bool) {
|
||||
SocketLogger.log("Engine is being closed. Fast: \(fast)", client: self)
|
||||
|
||||
self.pingTimer?.invalidate()
|
||||
self.closed = true
|
||||
|
||||
@ -117,7 +119,7 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient {
|
||||
self.ws?.disconnect()
|
||||
|
||||
if fast || self.polling {
|
||||
self.client?.engineDidForceClose("Disconnect")
|
||||
self.client?.engineDidClose("Disconnect")
|
||||
}
|
||||
}
|
||||
|
||||
@ -349,7 +351,6 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient {
|
||||
}
|
||||
|
||||
// A poll failed, tell the client about it
|
||||
|
||||
private func handlePollingFailed(reason:String) {
|
||||
self._connected = false
|
||||
self.ws?.disconnect()
|
||||
@ -361,10 +362,9 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient {
|
||||
return
|
||||
}
|
||||
|
||||
if !self.closed && !self.client!.reconnecting {
|
||||
self.client?.pollingDidFail(reason)
|
||||
} else if !self.client!.reconnecting {
|
||||
self.client?.engineDidForceClose(reason)
|
||||
if !self.closed {
|
||||
self.client?.didError(reason)
|
||||
self.client?.engineDidClose(reason)
|
||||
}
|
||||
}
|
||||
|
||||
@ -536,7 +536,7 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient {
|
||||
}
|
||||
|
||||
if self.polling {
|
||||
self.client!.engineDidForceClose("Disconnect")
|
||||
self.client!.engineDidClose("Disconnect")
|
||||
}
|
||||
|
||||
return
|
||||
@ -699,7 +699,7 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient {
|
||||
self.probing = false
|
||||
|
||||
if self.closed {
|
||||
self.client?.engineDidForceClose("Disconnect")
|
||||
self.client?.engineDidClose("Disconnect")
|
||||
return
|
||||
}
|
||||
|
||||
@ -708,9 +708,8 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient {
|
||||
self._connected = false
|
||||
self._websocket = false
|
||||
|
||||
let reason = error?.localizedDescription
|
||||
self.client?.webSocketDidCloseWithCode(1,
|
||||
reason: reason == nil ? "Socket Disconnected" : reason!)
|
||||
self.client?.didError(error?.localizedDescription ?? "Socket Disconnected")
|
||||
self.client?.engineDidClose(error?.localizedDescription ?? "Socket Disconnected")
|
||||
} else {
|
||||
self.flushProbeWait()
|
||||
}
|
||||
|
||||
@ -28,15 +28,11 @@ import Foundation
|
||||
@objc public protocol SocketEngineClient {
|
||||
var handleQueue:dispatch_queue_attr_t! {get}
|
||||
var emitQueue:dispatch_queue_attr_t! {get}
|
||||
var reconnecting:Bool {get}
|
||||
var socketURL:String {get}
|
||||
var secure:Bool {get}
|
||||
|
||||
func didError(reason:AnyObject)
|
||||
func engineDidForceClose(reason:String)
|
||||
func engineDidClose(reason:String)
|
||||
func parseSocketMessage(msg:String)
|
||||
func parseBinaryData(data:NSData)
|
||||
func pollingDidFail(err:String)
|
||||
func webSocketDidCloseWithCode(code:Int, reason:String)
|
||||
func webSocketDidFailWithError(error:NSError)
|
||||
}
|
||||
@ -249,9 +249,28 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient
|
||||
self.handleEvent("connect", data: nil, isInternalMessage: false)
|
||||
}
|
||||
|
||||
func didDisconnect(reason:String) {
|
||||
if self.closed {
|
||||
return
|
||||
}
|
||||
|
||||
SocketLogger.log("Disconnected: \(reason)", client: self)
|
||||
|
||||
self._closed = true
|
||||
self._connected = false
|
||||
self.reconnects = false
|
||||
self._connecting = false
|
||||
self._reconnecting = false
|
||||
|
||||
// Make sure the engine is actually dead.
|
||||
self.engine?.close(fast: true)
|
||||
|
||||
self.handleEvent("disconnect", data: [reason], isInternalMessage: true)
|
||||
}
|
||||
|
||||
/// error
|
||||
public func didError(reason:AnyObject) {
|
||||
SocketLogger.err("Error", client: self)
|
||||
SocketLogger.err("Error: \(reason)", client: self)
|
||||
|
||||
self.handleEvent("error", data: reason as? [AnyObject] ?? [reason],
|
||||
isInternalMessage: true)
|
||||
@ -356,20 +375,16 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient
|
||||
}
|
||||
}
|
||||
|
||||
/// Server wants us to die
|
||||
public func engineDidForceClose(reason:String) {
|
||||
if self.closed {
|
||||
return
|
||||
}
|
||||
|
||||
SocketLogger.log("Engine closed", client: self)
|
||||
|
||||
self._closed = true
|
||||
public func engineDidClose(reason:String) {
|
||||
self._connected = false
|
||||
self.reconnects = false
|
||||
self._connecting = false
|
||||
self._reconnecting = false
|
||||
self.handleEvent("disconnect", data: [reason], isInternalMessage: true)
|
||||
|
||||
if self.closed || !self.reconnects {
|
||||
self.didDisconnect("Engine closed")
|
||||
} else if !self.reconnecting {
|
||||
self.handleEvent("reconnect", data: [reason], isInternalMessage: true)
|
||||
self.tryReconnect()
|
||||
}
|
||||
}
|
||||
|
||||
// Called when the socket gets an ack for something it sent
|
||||
@ -458,19 +473,10 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient
|
||||
SocketParser.parseBinaryData(data, socket: self)
|
||||
}
|
||||
|
||||
// Something happened while polling
|
||||
public func pollingDidFail(err:String) {
|
||||
if !self.reconnecting {
|
||||
self._connected = false
|
||||
self.handleEvent("reconnect", data: [err], isInternalMessage: true)
|
||||
self.tryReconnect()
|
||||
}
|
||||
}
|
||||
|
||||
// We lost connection and should attempt to reestablish
|
||||
func tryReconnect() {
|
||||
if self.reconnectAttempts != -1 && self.currentReconnectAttempt + 1 > self.reconnectAttempts {
|
||||
self.engineDidForceClose("Reconnect Failed")
|
||||
self.didDisconnect("Reconnect Failed")
|
||||
return
|
||||
} else if self.connected {
|
||||
self._connecting = false
|
||||
@ -504,29 +510,4 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient
|
||||
self.connect()
|
||||
}
|
||||
}
|
||||
|
||||
// Called when the socket is closed
|
||||
public func webSocketDidCloseWithCode(code:Int, reason:String) {
|
||||
self._connected = false
|
||||
self._connecting = false
|
||||
if self.closed || !self.reconnects {
|
||||
self.engineDidForceClose("WebSocket closed")
|
||||
} else if !self.reconnecting {
|
||||
self.handleEvent("reconnect", data: [reason], isInternalMessage: true)
|
||||
self.tryReconnect()
|
||||
}
|
||||
}
|
||||
|
||||
// Called when an error occurs.
|
||||
public func webSocketDidFailWithError(error:NSError) {
|
||||
self._connected = false
|
||||
self._connecting = false
|
||||
self.handleEvent("error", data: [error.localizedDescription], isInternalMessage: true)
|
||||
if self.closed || !self.reconnects {
|
||||
self.engineDidForceClose("WebSocket closed with an error \(error)")
|
||||
} else if !self.reconnecting {
|
||||
self.handleEvent("reconnect", data: [error.localizedDescription], isInternalMessage: true)
|
||||
self.tryReconnect()
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -55,7 +55,7 @@ final class SocketPacket: Printable {
|
||||
case BINARY_ACK = 6
|
||||
|
||||
init?(str:String) {
|
||||
if let int = str.toInt(), let raw = PacketType(rawValue: int) {
|
||||
if let int = str.toInt(), raw = PacketType(rawValue: int) {
|
||||
self = raw
|
||||
} else {
|
||||
return nil
|
||||
|
||||
@ -236,7 +236,7 @@ class SocketParser {
|
||||
socket.didConnect()
|
||||
}
|
||||
} else if p.type == SocketPacket.PacketType.DISCONNECT {
|
||||
socket.engineDidForceClose("Got Disconnect")
|
||||
socket.didDisconnect("Got Disconnect")
|
||||
} else if p.type == SocketPacket.PacketType.ERROR {
|
||||
socket.didError(p.data == nil ? "Error" : p.data!)
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user