Skip to content

Commit 2f4c942

Browse files
committed
use connect/disconnect for engine
1 parent 70283ac commit 2f4c942

File tree

3 files changed

+74
-64
lines changed

3 files changed

+74
-64
lines changed

Source/SocketEngine.swift

Lines changed: 65 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -186,32 +186,42 @@ public final class SocketEngine: NSObject, SocketEnginePollable, SocketEngineWeb
186186
}
187187

188188
public func close(reason: String) {
189-
func postSendClose(data: NSData?, _ res: NSURLResponse?, _ err: NSError?) {
190-
sid = ""
191-
closed = true
192-
invalidated = true
193-
connected = false
194-
195-
pingTimer?.invalidate()
196-
ws?.disconnect()
197-
stopPolling()
198-
client?.engineDidClose(reason)
189+
disconnect(reason)
190+
}
191+
192+
/// Starts the connection to the server
193+
public func connect() {
194+
if connected {
195+
DefaultSocketLogger.Logger.error("Engine tried opening while connected. Assuming this was a reconnect", type: logType)
196+
close("reconnect")
199197
}
200198

201-
DefaultSocketLogger.Logger.log("Engine is being closed.", type: logType)
199+
DefaultSocketLogger.Logger.log("Starting engine", type: logType)
200+
DefaultSocketLogger.Logger.log("Handshaking", type: logType)
202201

203-
if websocket {
204-
sendWebSocketMessage("", withType: .Close, withData: [])
205-
postSendClose(nil, nil, nil)
206-
} else {
207-
// We need to take special care when we're polling that we send it ASAP
208-
// Also make sure we're on the emitQueue since we're touching postWait
209-
dispatch_sync(emitQueue) {
210-
self.postWait.append(String(SocketEnginePacketType.Close.rawValue))
211-
let req = self.createRequestForPostWithPostWait()
212-
self.doRequest(req, withCallback: postSendClose)
202+
resetEngine()
203+
204+
if forceWebsockets {
205+
polling = false
206+
websocket = true
207+
createWebsocketAndConnect()
208+
return
209+
}
210+
211+
let reqPolling = NSMutableURLRequest(URL: urlPolling)
212+
213+
if cookies != nil {
214+
let headers = NSHTTPCookie.requestHeaderFieldsWithCookies(cookies!)
215+
reqPolling.allHTTPHeaderFields = headers
216+
}
217+
218+
if let extraHeaders = extraHeaders {
219+
for (headerName, value) in extraHeaders {
220+
reqPolling.setValue(value, forHTTPHeaderField: headerName)
213221
}
214222
}
223+
224+
doLongPoll(reqPolling)
215225
}
216226

217227
private func createURLs() -> (NSURL, NSURL) {
@@ -277,6 +287,35 @@ public final class SocketEngine: NSObject, SocketEnginePollable, SocketEngineWeb
277287
client?.engineDidError(error)
278288
close(error)
279289
}
290+
291+
public func disconnect(reason: String) {
292+
func postSendClose(data: NSData?, _ res: NSURLResponse?, _ err: NSError?) {
293+
sid = ""
294+
closed = true
295+
invalidated = true
296+
connected = false
297+
298+
pingTimer?.invalidate()
299+
ws?.disconnect()
300+
stopPolling()
301+
client?.engineDidClose(reason)
302+
}
303+
304+
DefaultSocketLogger.Logger.log("Engine is being closed.", type: logType)
305+
306+
if websocket {
307+
sendWebSocketMessage("", withType: .Close, withData: [])
308+
postSendClose(nil, nil, nil)
309+
} else {
310+
// We need to take special care when we're polling that we send it ASAP
311+
// Also make sure we're on the emitQueue since we're touching postWait
312+
dispatch_sync(emitQueue) {
313+
self.postWait.append(String(SocketEnginePacketType.Close.rawValue))
314+
let req = self.createRequestForPostWithPostWait()
315+
self.doRequest(req, withCallback: postSendClose)
316+
}
317+
}
318+
}
280319

281320
public func doFastUpgrade() {
282321
if waitingForPoll {
@@ -383,37 +422,7 @@ public final class SocketEngine: NSObject, SocketEnginePollable, SocketEngineWeb
383422
}
384423

385424
public func open() {
386-
if connected {
387-
DefaultSocketLogger.Logger.error("Engine tried opening while connected. Assuming this was a reconnect", type: logType)
388-
close("reconnect")
389-
}
390-
391-
DefaultSocketLogger.Logger.log("Starting engine", type: logType)
392-
DefaultSocketLogger.Logger.log("Handshaking", type: logType)
393-
394-
resetEngine()
395-
396-
if forceWebsockets {
397-
polling = false
398-
websocket = true
399-
createWebsocketAndConnect()
400-
return
401-
}
402-
403-
let reqPolling = NSMutableURLRequest(URL: urlPolling)
404-
405-
if cookies != nil {
406-
let headers = NSHTTPCookie.requestHeaderFieldsWithCookies(cookies!)
407-
reqPolling.allHTTPHeaderFields = headers
408-
}
409-
410-
if let extraHeaders = extraHeaders {
411-
for (headerName, value) in extraHeaders {
412-
reqPolling.setValue(value, forHTTPHeaderField: headerName)
413-
}
414-
}
415-
416-
doLongPoll(reqPolling)
425+
connect()
417426
}
418427

419428
public func parseEngineData(data: NSData) {
@@ -457,6 +466,7 @@ public final class SocketEngine: NSObject, SocketEnginePollable, SocketEngineWeb
457466
}
458467
}
459468

469+
// Puts the engine back in its default state
460470
private func resetEngine() {
461471
closed = false
462472
connected = false
@@ -485,19 +495,19 @@ public final class SocketEngine: NSObject, SocketEnginePollable, SocketEngineWeb
485495
write("", withType: .Ping, withData: [])
486496
}
487497

488-
// Starts the ping timer
489498
private func startPingTimer() {
490499
if let pingInterval = pingInterval {
491500
pingTimer?.invalidate()
492501
pingTimer = nil
493-
502+
494503
dispatch_async(dispatch_get_main_queue()) {
495504
self.pingTimer = NSTimer.scheduledTimerWithTimeInterval(pingInterval, target: self,
496505
selector: Selector("sendPing"), userInfo: nil, repeats: true)
497506
}
498507
}
499508
}
500509

510+
// Moves from long-polling to websockets
501511
private func upgradeTransport() {
502512
if ws?.isConnected ?? false {
503513
DefaultSocketLogger.Logger.log("Upgrading transport to WebSockets", type: logType)
@@ -508,9 +518,7 @@ public final class SocketEngine: NSObject, SocketEnginePollable, SocketEngineWeb
508518
}
509519
}
510520

511-
/**
512-
Write a message, independent of transport.
513-
*/
521+
/// Write a message, independent of transport.
514522
public func write(msg: String, withType type: SocketEnginePacketType, withData data: [NSData]) {
515523
dispatch_async(emitQueue) {
516524
guard self.connected else { return }

Source/SocketEngineSpec.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,13 @@ import Foundation
5050

5151
init(client: SocketEngineClient, url: NSURL, options: NSDictionary?)
5252

53-
func close(reason: String)
53+
@available(*, deprecated=5.5, message="Please use disconnect") func close(reason: String)
54+
func connect()
5455
func didError(error: String)
56+
func disconnect(reason: String)
5557
func doFastUpgrade()
5658
func flushWaitingForPostToWebSocket()
57-
func open()
59+
@available(*, deprecated=5.5, message="Please use connect") func open()
5860
func parseEngineData(data: NSData)
5961
func parseEngineMessage(message: String, fromPolling: Bool)
6062
func write(msg: String, withType type: SocketEnginePacketType, withData data: [NSData])

Source/SocketIOClient.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketParsable
116116

117117
deinit {
118118
DefaultSocketLogger.Logger.log("Client is being released", type: logType)
119-
engine?.close("Client Deinit")
119+
engine?.disconnect("Client Deinit")
120120
}
121121

122122
private func addEngine() -> SocketEngineSpec {
@@ -159,9 +159,9 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketParsable
159159
status = .Connecting
160160

161161
if engine == nil || forceNew {
162-
addEngine().open()
162+
addEngine().connect()
163163
} else {
164-
engine?.open()
164+
engine?.connect()
165165
}
166166

167167
guard timeoutAfter != 0 else { return }
@@ -171,7 +171,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketParsable
171171
dispatch_after(time, handleQueue) {[weak self] in
172172
if let this = self where this.status != .Connected || this.status != .Closed {
173173
this.status = .Closed
174-
this.engine?.close("Connect timeout")
174+
this.engine?.disconnect("Connect timeout")
175175

176176
handler?()
177177
}
@@ -220,7 +220,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketParsable
220220
reconnects = false
221221

222222
// Make sure the engine is actually dead.
223-
engine?.close(reason)
223+
engine?.disconnect(reason)
224224
handleEvent("disconnect", data: [reason], isInternalMessage: true)
225225
}
226226

0 commit comments

Comments
 (0)