refactor, fix reconnect bug, fix internalmessages

This commit is contained in:
Erik 2015-08-13 09:56:22 -04:00
parent 5e92fc323d
commit 7ebcd7439f
6 changed files with 40 additions and 28 deletions

View File

@ -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

View File

@ -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()

View File

@ -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],

View File

@ -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())
}

View File

@ -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
}

View File

@ -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) {