refactor, fix reconnect bug, fix internalmessages
This commit is contained in:
parent
5e92fc323d
commit
7ebcd7439f
@ -24,9 +24,12 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
public final class SocketAnyEvent: NSObject {
|
||||
@objc public final class SocketAnyEvent: NSObject {
|
||||
public let event: String!
|
||||
public let items: NSArray?
|
||||
override public var description: String {
|
||||
return "SocketAnyEvent: Event: \(event) items: \(items ?? nil)"
|
||||
}
|
||||
|
||||
init(event: String, items: NSArray?) {
|
||||
self.event = event
|
||||
|
||||
@ -33,7 +33,7 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient {
|
||||
private let emitQueue = dispatch_queue_create("engineEmitQueue", DISPATCH_QUEUE_SERIAL)
|
||||
private let parseQueue = dispatch_queue_create("engineParseQueue", DISPATCH_QUEUE_SERIAL)
|
||||
private let handleQueue = dispatch_queue_create("engineHandleQueue", DISPATCH_QUEUE_SERIAL)
|
||||
private let session:NSURLSession!
|
||||
private let session: NSURLSession!
|
||||
|
||||
private var closed = false
|
||||
private var extraHeaders: [String: String]?
|
||||
@ -748,7 +748,7 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient {
|
||||
if error != nil {
|
||||
client?.didError(reason)
|
||||
}
|
||||
|
||||
|
||||
client?.engineDidClose(reason)
|
||||
} else {
|
||||
flushProbeWait()
|
||||
|
||||
@ -309,6 +309,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient
|
||||
if status == SocketIOClientStatus.Closed || !reconnects {
|
||||
didDisconnect(reason)
|
||||
} else if status != SocketIOClientStatus.Reconnecting {
|
||||
status = SocketIOClientStatus.Reconnecting
|
||||
handleEvent("reconnect", data: [reason], isInternalMessage: true)
|
||||
tryReconnect()
|
||||
}
|
||||
@ -326,9 +327,9 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient
|
||||
/**
|
||||
Causes an event to be handled. Only use if you know what you're doing.
|
||||
*/
|
||||
public func handleEvent(event:String, data:[AnyObject]?, isInternalMessage:Bool = false,
|
||||
public func handleEvent(event:String, data:[AnyObject]?, isInternalMessage: Bool,
|
||||
wantsAck ack:Int? = nil) {
|
||||
guard status == SocketIOClientStatus.Connected && !isInternalMessage else {
|
||||
guard status == SocketIOClientStatus.Connected || isInternalMessage else {
|
||||
return
|
||||
}
|
||||
// println("Should do event: \(event) with data: \(data)")
|
||||
@ -444,26 +445,14 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient
|
||||
}
|
||||
|
||||
/**
|
||||
Trieds to reconnect to the server.
|
||||
Tries to reconnect to the server.
|
||||
*/
|
||||
public func reconnect() {
|
||||
status = SocketIOClientStatus.Reconnecting
|
||||
engine?.stopPolling()
|
||||
tryReconnect()
|
||||
}
|
||||
|
||||
@objc private func tryReconnect() {
|
||||
guard status != SocketIOClientStatus.Connected else {
|
||||
return
|
||||
}
|
||||
|
||||
if reconnectAttempts != -1 && currentReconnectAttempt + 1 > reconnectAttempts || !reconnects {
|
||||
clearReconnectTimer()
|
||||
didDisconnect("Reconnect Failed")
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
private func tryReconnect() {
|
||||
if reconnectTimer == nil {
|
||||
SocketLogger.log("Starting reconnect", client: self)
|
||||
|
||||
@ -472,10 +461,26 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient
|
||||
dispatch_async(dispatch_get_main_queue()) {[weak self] in
|
||||
if let this = self {
|
||||
this.reconnectTimer = NSTimer.scheduledTimerWithTimeInterval(Double(this.reconnectWait),
|
||||
target: this, selector: "tryReconnect", userInfo: nil, repeats: true)
|
||||
target: this, selector: "_tryReconnect", userInfo: nil, repeats: true)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@objc private func _tryReconnect() {
|
||||
if status == SocketIOClientStatus.Connected {
|
||||
clearReconnectTimer()
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
if reconnectAttempts != -1 && currentReconnectAttempt + 1 > reconnectAttempts || !reconnects {
|
||||
clearReconnectTimer()
|
||||
didDisconnect("Reconnect Failed")
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
SocketLogger.log("Trying to reconnect", client: self)
|
||||
handleEvent("reconnectAttempt", data: [reconnectAttempts - currentReconnectAttempt],
|
||||
|
||||
@ -225,7 +225,7 @@ class SocketParser {
|
||||
|
||||
if packet.type != SocketPacket.PacketType.BinaryAck {
|
||||
socket.handleEvent(packet.getEvent(), data: packet.getArgs(),
|
||||
wantsAck: packet.id)
|
||||
isInternalMessage: false, wantsAck: packet.id)
|
||||
} else {
|
||||
socket.handleAck(packet.id, data: packet.getArgs())
|
||||
}
|
||||
|
||||
@ -32,7 +32,11 @@ public typealias NormalCallbackObjectiveC = (NSArray?, AckEmitterObjectiveC?) ->
|
||||
public typealias OnAckCallback = (timeoutAfter:UInt64, callback:AckCallback) -> Void
|
||||
|
||||
|
||||
@objc public enum SocketIOClientStatus: Int {
|
||||
@objc public enum SocketIOClientStatus: Int, CustomStringConvertible {
|
||||
public var description: String {
|
||||
return String(self.rawValue)
|
||||
}
|
||||
|
||||
case NotConnected, Closed, Connecting, Connected, Reconnecting
|
||||
|
||||
}
|
||||
|
||||
@ -93,7 +93,7 @@ public class WebSocket : NSObject, NSStreamDelegate {
|
||||
public var headers = Dictionary<String,String>()
|
||||
public var voipEnabled = false
|
||||
public var selfSignedSSL = false
|
||||
public var security: Security?
|
||||
private var security: Security?
|
||||
public var isConnected :Bool {
|
||||
return connected
|
||||
}
|
||||
@ -771,8 +771,8 @@ public class SSLCert {
|
||||
}
|
||||
}
|
||||
|
||||
public class Security {
|
||||
public var validatedDN = true //should the domain name be validated?
|
||||
private class Security {
|
||||
private var validatedDN = true //should the domain name be validated?
|
||||
|
||||
var isReady = false //is the key processing done?
|
||||
var certificates: [NSData]? //the certificates
|
||||
@ -786,7 +786,7 @@ public class Security {
|
||||
|
||||
:returns: a representation security object to be used with
|
||||
*/
|
||||
public convenience init(usePublicKeys: Bool = false) {
|
||||
private convenience init(usePublicKeys: Bool = false) {
|
||||
let paths = NSBundle.mainBundle().pathsForResourcesOfType("cer", inDirectory: ".")
|
||||
var collect = Array<SSLCert>()
|
||||
for path in paths {
|
||||
@ -805,7 +805,7 @@ public class Security {
|
||||
|
||||
:returns: a representation security object to be used with
|
||||
*/
|
||||
public init(certs: [SSLCert], usePublicKeys: Bool) {
|
||||
private init(certs: [SSLCert], usePublicKeys: Bool) {
|
||||
self.usePublicKeys = usePublicKeys
|
||||
|
||||
if self.usePublicKeys {
|
||||
@ -842,7 +842,7 @@ public class Security {
|
||||
|
||||
:returns: if the key was successfully validated
|
||||
*/
|
||||
public func isValid(trust: SecTrustRef, domain: String?) -> Bool {
|
||||
private func isValid(trust: SecTrustRef, domain: String?) -> Bool {
|
||||
|
||||
var tries = 0
|
||||
while(!self.isReady) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user