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) {
|
public func close(#fast:Bool) {
|
||||||
|
SocketLogger.log("Engine is being closed. Fast: \(fast)", client: self)
|
||||||
|
|
||||||
self.pingTimer?.invalidate()
|
self.pingTimer?.invalidate()
|
||||||
self.closed = true
|
self.closed = true
|
||||||
|
|
||||||
@ -117,7 +119,7 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient {
|
|||||||
self.ws?.disconnect()
|
self.ws?.disconnect()
|
||||||
|
|
||||||
if fast || self.polling {
|
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
|
// A poll failed, tell the client about it
|
||||||
|
|
||||||
private func handlePollingFailed(reason:String) {
|
private func handlePollingFailed(reason:String) {
|
||||||
self._connected = false
|
self._connected = false
|
||||||
self.ws?.disconnect()
|
self.ws?.disconnect()
|
||||||
@ -361,10 +362,9 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !self.closed && !self.client!.reconnecting {
|
if !self.closed {
|
||||||
self.client?.pollingDidFail(reason)
|
self.client?.didError(reason)
|
||||||
} else if !self.client!.reconnecting {
|
self.client?.engineDidClose(reason)
|
||||||
self.client?.engineDidForceClose(reason)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -536,7 +536,7 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if self.polling {
|
if self.polling {
|
||||||
self.client!.engineDidForceClose("Disconnect")
|
self.client!.engineDidClose("Disconnect")
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
@ -699,7 +699,7 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient {
|
|||||||
self.probing = false
|
self.probing = false
|
||||||
|
|
||||||
if self.closed {
|
if self.closed {
|
||||||
self.client?.engineDidForceClose("Disconnect")
|
self.client?.engineDidClose("Disconnect")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -708,9 +708,8 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient {
|
|||||||
self._connected = false
|
self._connected = false
|
||||||
self._websocket = false
|
self._websocket = false
|
||||||
|
|
||||||
let reason = error?.localizedDescription
|
self.client?.didError(error?.localizedDescription ?? "Socket Disconnected")
|
||||||
self.client?.webSocketDidCloseWithCode(1,
|
self.client?.engineDidClose(error?.localizedDescription ?? "Socket Disconnected")
|
||||||
reason: reason == nil ? "Socket Disconnected" : reason!)
|
|
||||||
} else {
|
} else {
|
||||||
self.flushProbeWait()
|
self.flushProbeWait()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,15 +28,11 @@ import Foundation
|
|||||||
@objc public protocol SocketEngineClient {
|
@objc public protocol SocketEngineClient {
|
||||||
var handleQueue:dispatch_queue_attr_t! {get}
|
var handleQueue:dispatch_queue_attr_t! {get}
|
||||||
var emitQueue:dispatch_queue_attr_t! {get}
|
var emitQueue:dispatch_queue_attr_t! {get}
|
||||||
var reconnecting:Bool {get}
|
|
||||||
var socketURL:String {get}
|
var socketURL:String {get}
|
||||||
var secure:Bool {get}
|
var secure:Bool {get}
|
||||||
|
|
||||||
func didError(reason:AnyObject)
|
func didError(reason:AnyObject)
|
||||||
func engineDidForceClose(reason:String)
|
func engineDidClose(reason:String)
|
||||||
func parseSocketMessage(msg:String)
|
func parseSocketMessage(msg:String)
|
||||||
func parseBinaryData(data:NSData)
|
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)
|
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
|
/// error
|
||||||
public func didError(reason:AnyObject) {
|
public func didError(reason:AnyObject) {
|
||||||
SocketLogger.err("Error", client: self)
|
SocketLogger.err("Error: \(reason)", client: self)
|
||||||
|
|
||||||
self.handleEvent("error", data: reason as? [AnyObject] ?? [reason],
|
self.handleEvent("error", data: reason as? [AnyObject] ?? [reason],
|
||||||
isInternalMessage: true)
|
isInternalMessage: true)
|
||||||
@ -356,20 +375,16 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Server wants us to die
|
public func engineDidClose(reason:String) {
|
||||||
public func engineDidForceClose(reason:String) {
|
|
||||||
if self.closed {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
SocketLogger.log("Engine closed", client: self)
|
|
||||||
|
|
||||||
self._closed = true
|
|
||||||
self._connected = false
|
self._connected = false
|
||||||
self.reconnects = false
|
|
||||||
self._connecting = 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
|
// 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)
|
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
|
// We lost connection and should attempt to reestablish
|
||||||
func tryReconnect() {
|
func tryReconnect() {
|
||||||
if self.reconnectAttempts != -1 && self.currentReconnectAttempt + 1 > self.reconnectAttempts {
|
if self.reconnectAttempts != -1 && self.currentReconnectAttempt + 1 > self.reconnectAttempts {
|
||||||
self.engineDidForceClose("Reconnect Failed")
|
self.didDisconnect("Reconnect Failed")
|
||||||
return
|
return
|
||||||
} else if self.connected {
|
} else if self.connected {
|
||||||
self._connecting = false
|
self._connecting = false
|
||||||
@ -504,29 +510,4 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient
|
|||||||
self.connect()
|
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
|
case BINARY_ACK = 6
|
||||||
|
|
||||||
init?(str:String) {
|
init?(str:String) {
|
||||||
if let int = str.toInt(), let raw = PacketType(rawValue: int) {
|
if let int = str.toInt(), raw = PacketType(rawValue: int) {
|
||||||
self = raw
|
self = raw
|
||||||
} else {
|
} else {
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@ -236,7 +236,7 @@ class SocketParser {
|
|||||||
socket.didConnect()
|
socket.didConnect()
|
||||||
}
|
}
|
||||||
} else if p.type == SocketPacket.PacketType.DISCONNECT {
|
} else if p.type == SocketPacket.PacketType.DISCONNECT {
|
||||||
socket.engineDidForceClose("Got Disconnect")
|
socket.didDisconnect("Got Disconnect")
|
||||||
} else if p.type == SocketPacket.PacketType.ERROR {
|
} else if p.type == SocketPacket.PacketType.ERROR {
|
||||||
socket.didError(p.data == nil ? "Error" : p.data!)
|
socket.didError(p.data == nil ? "Error" : p.data!)
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user