From a87214cf06c840a444ee637a092740935aec9961 Mon Sep 17 00:00:00 2001 From: Erik Date: Fri, 30 Oct 2015 13:09:56 -0400 Subject: [PATCH] refactor client options --- SocketIOClientSwift/SocketEngine.swift | 3 +- SocketIOClientSwift/SocketIOClient.swift | 2 +- .../SocketIOClientOption.swift | 52 ++++++++++--------- 3 files changed, 29 insertions(+), 28 deletions(-) diff --git a/SocketIOClientSwift/SocketEngine.swift b/SocketIOClientSwift/SocketEngine.swift index 5319d6a..4319feb 100644 --- a/SocketIOClientSwift/SocketEngine.swift +++ b/SocketIOClientSwift/SocketEngine.swift @@ -112,7 +112,7 @@ public final class SocketEngine: NSObject, SocketEngineSpec, WebSocketDelegate { public convenience init(client: SocketEngineClient, url: String, options: NSDictionary?) { self.init(client: client, url: url, - options: SocketIOClientOption.NSDictionaryToSocketOptionsSet(options ?? [:])) + options: Set.NSDictionaryToSocketOptionsSet(options ?? [:])) } deinit { @@ -210,7 +210,6 @@ public final class SocketEngine: NSObject, SocketEngineSpec, WebSocketDelegate { let wsUrl = urlWebSocket + (sid == "" ? "" : "&sid=\(sid)") ws = WebSocket(url: NSURL(string: wsUrl)!) - if cookies != nil { let headers = NSHTTPCookie.requestHeaderFieldsWithCookies(cookies!) for (key, value) in headers { diff --git a/SocketIOClientSwift/SocketIOClient.swift b/SocketIOClientSwift/SocketIOClient.swift index 55b16ee..ae643db 100644 --- a/SocketIOClientSwift/SocketIOClient.swift +++ b/SocketIOClientSwift/SocketIOClient.swift @@ -105,7 +105,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient { */ public convenience init(socketURL: String, options: NSDictionary?) { self.init(socketURL: socketURL, - options: SocketIOClientOption.NSDictionaryToSocketOptionsSet(options ?? [:])) + options: Set.NSDictionaryToSocketOptionsSet(options ?? [:])) } deinit { diff --git a/SocketIOClientSwift/SocketIOClientOption.swift b/SocketIOClientSwift/SocketIOClientOption.swift index e75d5dd..b016813 100644 --- a/SocketIOClientSwift/SocketIOClientOption.swift +++ b/SocketIOClientSwift/SocketIOClientOption.swift @@ -24,9 +24,11 @@ import Foundation -protocol ClientOptions {} +protocol ClientOption: CustomStringConvertible, Hashable { + func getSocketIOOptionValue() -> AnyObject? +} -public enum SocketIOClientOption: CustomStringConvertible, Hashable, ClientOptions { +public enum SocketIOClientOption: ClientOption { case ConnectParams([String: AnyObject]) case Cookies([NSHTTPCookie]) case ExtraHeaders([String: String]) @@ -98,35 +100,13 @@ public enum SocketIOClientOption: CustomStringConvertible, Hashable, ClientOptio func getSocketIOOptionValue() -> AnyObject? { return Mirror(reflecting: self).children.first?.value as? AnyObject } - - static func NSDictionaryToSocketOptionsSet(dict: NSDictionary) -> Set { - var options = Set() - - for (rawKey, value) in dict { - if let key = rawKey as? String, opt = keyValueToSocketIOClientOption(key, value: value) { - options.insert(opt) - } - } - - return options - } - - static func SocketOptionsSetToNSDictionary(set: Set) -> NSDictionary { - let options = NSMutableDictionary() - - for option in set { - options[option.description] = option.getSocketIOOptionValue() - } - - return options - } } public func ==(lhs: SocketIOClientOption, rhs: SocketIOClientOption) -> Bool { return lhs.description == rhs.description } -extension Set where Element: ClientOptions { +extension Set where Element: ClientOption { mutating func insertIgnore(element: Element) { let (insertType, _) = Mirror(reflecting: element).children.first! for item in self { @@ -138,4 +118,26 @@ extension Set where Element: ClientOptions { self.insert(element) } + + static func NSDictionaryToSocketOptionsSet(dict: NSDictionary) -> Set { + var options = Set() + + for (rawKey, value) in dict { + if let key = rawKey as? String, opt = SocketIOClientOption.keyValueToSocketIOClientOption(key, value: value) { + options.insert(opt) + } + } + + return options + } + + func SocketOptionsSetToNSDictionary() -> NSDictionary { + let options = NSMutableDictionary() + + for option in self { + options[option.description] = option.getSocketIOOptionValue() + } + + return options + } }