From ab77d7260e3f8647ffbac9905a9e22ab8633c4b8 Mon Sep 17 00:00:00 2001 From: Erik Date: Tue, 17 Mar 2015 23:57:31 -0400 Subject: [PATCH 1/2] work on socketio/socket.io-client-swift#17 --- SwiftIO/SocketEngine.swift | 16 ++++++++++++---- SwiftIO/SocketIOClient.swift | 9 ++++++++- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/SwiftIO/SocketEngine.swift b/SwiftIO/SocketEngine.swift index 33af2fb..8bec87c 100644 --- a/SwiftIO/SocketEngine.swift +++ b/SwiftIO/SocketEngine.swift @@ -67,6 +67,7 @@ public class SocketEngine: NSObject, WebSocketDelegate { var connected:Bool { return self._connected } + var cookies:[NSHTTPCookie]? var pingInterval:Int? var polling:Bool { return self._polling @@ -79,9 +80,10 @@ public class SocketEngine: NSObject, WebSocketDelegate { } var ws:WebSocket? - init(client:SocketIOClient, forcePolling:Bool = false) { + init(client:SocketIOClient, forcePolling:Bool = false, withCookies cookies:[NSHTTPCookie]?) { self.client = client self.forcePolling = forcePolling + self.cookies = cookies self.session = NSURLSession(configuration: NSURLSessionConfiguration.ephemeralSessionConfiguration(), delegate: nil, delegateQueue: self.workQueue) } @@ -288,7 +290,13 @@ public class SocketEngine: NSObject, WebSocketDelegate { let (urlPolling, urlWebSocket) = self.createURLs(params: opts) self.urlPolling = urlPolling self.urlWebSocket = urlWebSocket - let reqPolling = NSURLRequest(URL: NSURL(string: urlPolling + "&b64=1")!) + let reqPolling = NSMutableURLRequest(URL: NSURL(string: urlPolling + "&b64=1")!) + + if self.cookies != nil { + let headers = NSHTTPCookie.requestHeaderFieldsWithCookies(self.cookies!) + reqPolling.allHTTPHeaderFields = headers + } + self.session.dataTaskWithRequest(reqPolling) {[weak self] data, res, err in var err2:NSError? @@ -470,10 +478,10 @@ public class SocketEngine: NSObject, WebSocketDelegate { } if self!.websocket { - // println("sending ws: \(msg):\(datas)") + // NSLog("sending ws: \(msg):\(datas)") self?.sendWebSocketMessage(msg, withType: PacketType.MESSAGE, datas: datas) } else { - // println("sending poll: \(msg):\(datas)") + // NSLog("sending poll: \(msg):\(datas)") self?.sendPollMessage(msg, withType: PacketType.MESSAGE, datas: datas) } } diff --git a/SwiftIO/SocketIOClient.swift b/SwiftIO/SocketIOClient.swift index 27afb7d..cf5a837 100644 --- a/SwiftIO/SocketIOClient.swift +++ b/SwiftIO/SocketIOClient.swift @@ -60,6 +60,7 @@ public class SocketIOClient: NSObject { public var connecting:Bool { return self._connecting } + public var cookies:[NSHTTPCookie]? public var engine:SocketEngine? public var nsp:String? public var reconnects = true @@ -107,13 +108,19 @@ public class SocketIOClient: NSObject { if let polling = opts!["forcePolling"] as? Bool { self.forcePolling = polling } + + if let cookies = opts!["cookies"] as? [NSHTTPCookie] { + self.cookies = cookies + } } else { self.reconnectAttempts = -1 } super.init() - self.engine = SocketEngine(client: self, forcePolling: self.forcePolling) + self.engine = SocketEngine(client: self, + forcePolling: self.forcePolling, + withCookies: self.cookies) } public convenience init(socketURL:String, options:NSDictionary?) { From 0ca13c5496b0cdcd8c0a4d624c92a74c6acdd14f Mon Sep 17 00:00:00 2001 From: Erik Date: Wed, 18 Mar 2015 13:57:20 -0400 Subject: [PATCH 2/2] update readme --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 87b9da9..d5c93d5 100644 --- a/README.md +++ b/README.md @@ -68,11 +68,12 @@ Example ```swift // opts can be omitted, will use default values let socket = SocketIOClient(socketURL: "https://localhost:8080", opts: [ - "reconnects": true, // default true - "reconnectAttempts": 5, // default -1 (infinite tries) - "reconnectWait": 5, // default 10 + "reconnects": true, // Default is true + "reconnectAttempts": 5, // Default is -1 (infinite tries) + "reconnectWait": 5, // Default is 10 "nsp": "swift", // connects to the specified namespace. Default is / - "forcePolling": true // if true, the socket will only use XHR polling, default is false (polling/WebSockets) + "forcePolling": true, // if true, the socket will only use XHR polling, Default is false (polling/WebSockets) + "cookies": nil // An array of NSHTTPCookies. Passed during handshake. Default is nil ]) // Called on every event