|
25 | 25 | import Foundation
|
26 | 26 |
|
27 | 27 | public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient {
|
28 |
| - private lazy var params = [String: AnyObject]() |
29 | 28 | private var anyHandler:((SocketAnyEvent) -> Void)?
|
30 | 29 | private var _closed = false
|
31 | 30 | private var _connected = false
|
32 | 31 | private var _connecting = false
|
33 | 32 | private var currentReconnectAttempt = 0
|
34 | 33 | private var handlers = ContiguousArray<SocketEventHandler>()
|
35 |
| - private var paramConnect = false |
| 34 | + private var params:[String: AnyObject]? |
36 | 35 | private var _secure = false
|
37 | 36 | private var _sid:String?
|
38 | 37 | private var _reconnecting = false
|
@@ -88,11 +87,16 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient
|
88 | 87 | self.socketURL = socketURL
|
89 | 88 | self.opts = opts
|
90 | 89 |
|
| 90 | + |
91 | 91 | // Set options
|
92 | 92 | if let sessionDelegate = opts?["sessionDelegate"] as? NSURLSessionDelegate {
|
93 | 93 | self.sessionDelegate = sessionDelegate
|
94 | 94 | }
|
95 | 95 |
|
| 96 | + if let connectParams = opts?["connectParams"] as? [String: AnyObject] { |
| 97 | + self.params = connectParams |
| 98 | + } |
| 99 | + |
96 | 100 | if let log = opts?["log"] as? Bool {
|
97 | 101 | self.log = log
|
98 | 102 | }
|
@@ -156,37 +160,38 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient
|
156 | 160 | Connect to the server.
|
157 | 161 | */
|
158 | 162 | public func connect() {
|
159 |
| - if self.closed { |
160 |
| - println("Warning! This socket was previously closed. This might be dangerous!") |
161 |
| - self._closed = false |
162 |
| - } |
163 |
| - |
164 |
| - if self.connected { |
165 |
| - return |
166 |
| - } |
167 |
| - |
168 |
| - self.addEngine() |
169 |
| - self.engine?.open() |
| 163 | + self.connect(timeoutAfter: 0, withTimeoutHandler: nil) |
170 | 164 | }
|
171 | 165 |
|
172 | 166 | /**
|
173 |
| - Connect to the server with params that will be passed on connection. |
| 167 | + Connect to the server. If we aren't connected after timeoutAfter, call handler |
174 | 168 | */
|
175 |
| - public func connectWithParams(params:[String: AnyObject]) { |
| 169 | + public func connect(#timeoutAfter:Int, withTimeoutHandler handler:(() -> Void)?) { |
176 | 170 | if self.closed {
|
177 |
| - println("Warning! This socket was previously closed. This might be dangerous!") |
| 171 | + SocketLogger.log("Warning! This socket was previously closed. This might be dangerous!", client: self) |
178 | 172 | self._closed = false
|
| 173 | + } else if self.connected { |
| 174 | + return |
179 | 175 | }
|
180 | 176 |
|
181 |
| - if self.connected { |
| 177 | + self.addEngine() |
| 178 | + self.engine?.open(opts: self.params) |
| 179 | + |
| 180 | + if timeoutAfter == 0 { |
182 | 181 | return
|
183 | 182 | }
|
184 | 183 |
|
185 |
| - self.params = params |
186 |
| - self.paramConnect = true |
| 184 | + let time = dispatch_time(DISPATCH_TIME_NOW, Int64(timeoutAfter) * Int64(NSEC_PER_SEC)) |
187 | 185 |
|
188 |
| - self.addEngine() |
189 |
| - self.engine?.open(opts: params) |
| 186 | + dispatch_after(time, dispatch_get_main_queue()) {[weak self] in |
| 187 | + if let this = self where !this.connected { |
| 188 | + this._closed = true |
| 189 | + this._connecting = false |
| 190 | + this.engine?.close(fast: true) |
| 191 | + |
| 192 | + handler?() |
| 193 | + } |
| 194 | + } |
190 | 195 | }
|
191 | 196 |
|
192 | 197 | private func createOnAck(event:String, items:[AnyObject]) -> OnAckCallback {
|
@@ -489,10 +494,6 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient
|
489 | 494 | isInternalMessage: true)
|
490 | 495 |
|
491 | 496 | self.currentReconnectAttempt++
|
492 |
| - if self.paramConnect { |
493 |
| - self.connectWithParams(self.params) |
494 |
| - } else { |
495 |
| - self.connect() |
496 |
| - } |
| 497 | + self.connect() |
497 | 498 | }
|
498 | 499 | }
|
0 commit comments