From 80ea42c91f776e51a5bd4866a43906cf7dea7f50 Mon Sep 17 00:00:00 2001 From: Erik Date: Wed, 5 Aug 2015 06:03:06 -0400 Subject: [PATCH 1/3] document objc method --- SocketIOClientSwift/SocketIOClient.swift | 3 +++ 1 file changed, 3 insertions(+) diff --git a/SocketIOClientSwift/SocketIOClient.swift b/SocketIOClientSwift/SocketIOClient.swift index e664193..459771e 100644 --- a/SocketIOClientSwift/SocketIOClient.swift +++ b/SocketIOClientSwift/SocketIOClient.swift @@ -427,6 +427,9 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient handlers.append(handler) } + /** + Adds a handler for an event. + */ public func onObjectiveC(event: String, callback: NormalCallbackObjectiveC) { SocketLogger.log("Adding handler for event: %@", client: self, args: event) From ffbe1e4ec4b59021cbc7ee8682c2813f85948520 Mon Sep 17 00:00:00 2001 From: Erik Date: Wed, 5 Aug 2015 06:09:24 -0400 Subject: [PATCH 2/3] add option for handle queue --- README.md | 1 + SocketIOClientSwift/SocketEventHandler.swift | 4 +-- SocketIOClientSwift/SocketIOClient.swift | 34 +++++++++++++------- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index bc30ccd..a66216b 100644 --- a/README.md +++ b/README.md @@ -121,6 +121,7 @@ Options - `sessionDelegate: NSURLSessionDelegate` Sets an NSURLSessionDelegate for the underlying engine. Useful if you need to handle self-signed certs. Default is nil. - `path: String` - If the server uses a custom path. ex: `"/swift"`. Default is `""` - `extraHeaders: [String: String]?` - Adds custom headers to the initial request. Default is nil. +- `handleQueue: dispatch_queue_t` - The dispatch queue that handlers are run on. Default is the main queue. Methods ------- diff --git a/SocketIOClientSwift/SocketEventHandler.swift b/SocketIOClientSwift/SocketEventHandler.swift index cef0d4d..9559532 100644 --- a/SocketIOClientSwift/SocketEventHandler.swift +++ b/SocketIOClientSwift/SocketEventHandler.swift @@ -40,8 +40,6 @@ final class SocketEventHandler { func executeCallback(_ items:NSArray? = nil, withAck ack:Int? = nil, withAckType type:Int? = nil, withSocket socket:SocketIOClient? = nil) { - dispatch_async(dispatch_get_main_queue()) {[weak self] in - self?.callback?(items, ack != nil ? emitAckCallback(socket!, ack!) : nil) - } + self.callback?(items, ack != nil ? emitAckCallback(socket!, ack!) : nil) } } diff --git a/SocketIOClientSwift/SocketIOClient.swift b/SocketIOClientSwift/SocketIOClient.swift index 0dffd87..d7ff0c5 100644 --- a/SocketIOClientSwift/SocketIOClient.swift +++ b/SocketIOClientSwift/SocketIOClient.swift @@ -46,7 +46,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient public let socketURL:String public let handleAckQueue = dispatch_queue_create("handleAckQueue", DISPATCH_QUEUE_SERIAL) - public let handleQueue = dispatch_queue_create("handleQueue", DISPATCH_QUEUE_SERIAL) + public let handleQueue: dispatch_queue_t! public let emitQueue = dispatch_queue_create("emitQueue", DISPATCH_QUEUE_SERIAL) public var closed:Bool { return _closed @@ -121,6 +121,12 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient self.reconnectWait = abs(reconnectWait) } + if let handleQueue = opts?["handleQueue"] as? dispatch_queue_t { + self.handleQueue = handleQueue + } else { + self.handleQueue = dispatch_get_main_queue() + } + super.init() } @@ -393,7 +399,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient args: event, data ?? "") if anyHandler != nil { - dispatch_async(dispatch_get_main_queue()) {[weak self] in + dispatch_async(handleQueue) {[weak self] in self?.anyHandler?(SocketAnyEvent(event: event, items: data)) } } @@ -401,9 +407,13 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient for handler in handlers { if handler.event == event { if ack != nil { - handler.executeCallback(data, withAck: ack!, withSocket: self) + dispatch_async(handleQueue) {[weak self] in + handler.executeCallback(data, withAck: ack!, withSocket: self) + } } else { - handler.executeCallback(data) + dispatch_async(handleQueue) {[weak self] in + handler.executeCallback(data) + } } } } @@ -448,14 +458,14 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient let handler = SocketEventHandler(event: event, callback: callback) handlers.append(handler) } - - /** - Removes all handlers. - Can be used after disconnecting to break any potential remaining retain cycles. - */ - public func removeAllHandlers() { - handlers.removeAll(keepCapacity: false) - } + + /** + Removes all handlers. + Can be used after disconnecting to break any potential remaining retain cycles. + */ + public func removeAllHandlers() { + handlers.removeAll(keepCapacity: false) + } /** Adds a handler that will be called on every event. From 469caf1b5436aaaeaa1599107155fa2f3984e54c Mon Sep 17 00:00:00 2001 From: Erik Date: Thu, 6 Aug 2015 14:12:35 -0400 Subject: [PATCH 3/3] update for latest beta --- SocketIOClientSwift/WebSocket.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SocketIOClientSwift/WebSocket.swift b/SocketIOClientSwift/WebSocket.swift index ef4ac88..c82b08b 100644 --- a/SocketIOClientSwift/WebSocket.swift +++ b/SocketIOClientSwift/WebSocket.swift @@ -388,7 +388,7 @@ public class WebSocket : NSObject, NSStreamDelegate { ///validates the HTTP is a 101 as per the RFC spec private func validateResponse(buffer: UnsafePointer, bufferLen: Int) -> Bool { - let response = CFHTTPMessageCreateEmpty(kCFAllocatorDefault, 0).takeRetainedValue() + let response = CFHTTPMessageCreateEmpty(kCFAllocatorDefault, false).takeRetainedValue() CFHTTPMessageAppendBytes(response, buffer, bufferLen) if CFHTTPMessageGetResponseStatusCode(response) != 101 { return false @@ -854,7 +854,7 @@ public class Security { } var policy: SecPolicyRef if self.validatedDN { - policy = SecPolicyCreateSSL(1, domain) + policy = SecPolicyCreateSSL(true, domain) } else { policy = SecPolicyCreateBasicX509() }