Skip to content

Commit 296802f

Browse files
committed
better handle closes
1 parent 829992f commit 296802f

File tree

2 files changed

+47
-23
lines changed

2 files changed

+47
-23
lines changed

SwiftIO/SocketEngine.swift

Lines changed: 39 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,15 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
7676
self.forcePolling = forcePolling
7777
}
7878

79-
func close() {
79+
func close(forced:Bool = false) {
8080
self.pingTimer?.invalidate()
8181

82-
self.send(PacketType.CLOSE.rawValue)
83-
self.ws?.close()
82+
if !forced {
83+
self.send(PacketType.CLOSE.rawValue)
84+
self.ws?.close()
85+
} else {
86+
self.client.didForceClose()
87+
}
8488

8589
if self.polling {
8690
self.client.handleEvent("disconnect", data: "close", isInternalMessage: true)
@@ -343,6 +347,10 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
343347
return
344348
}
345349

350+
if messageString == PacketType.CLOSE.rawValue {
351+
self?.close(forced: true)
352+
return
353+
}
346354
// println("Got something idk what to do with")
347355
// println(messageString)
348356
}
@@ -353,27 +361,21 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
353361
}
354362
}
355363

356-
func probeWebSocket() {
364+
private func probeWebSocket() {
357365
if self.websocketConnected {
358366
self.ws?.send("2probe")
359367
}
360368
}
361369

362-
func send(msg:AnyObject, datas:[NSData]? = nil) {
363-
let _send = {[weak self] (msg:AnyObject, datas:[NSData]?) -> () -> Void in
370+
func send(msg:String, datas:[NSData]? = nil) {
371+
let _send = {[weak self] (msg:String, datas:[NSData]?) -> () -> Void in
364372
return {
365373
if self == nil {
366374
return
367375
}
368376

369377
if self!.websocket {
370-
self?.ws?.send("\(PacketType.MESSAGE.rawValue)\(msg)")
371-
if datas != nil {
372-
for data in datas! {
373-
let (data, nilString) = self!.createBinaryDataForSend(data)
374-
self?.ws?.send(data!)
375-
}
376-
}
378+
self?.sendWebSocketMessage(msg, datas: datas)
377379
} else {
378380
self?.sendPollMessage(msg, datas: datas)
379381
}
@@ -393,7 +395,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
393395
} else {
394396
let time = Int(NSDate().timeIntervalSince1970)
395397
var req = NSMutableURLRequest(URL: NSURL(string:
396-
self.urlPolling! + "&t=\(time)-0&b64=1" + "&sid=\(self.sid)")!)
398+
self.urlPolling! + "&sid=\(self.sid)")!)
397399
let postStr = "1:\(PacketType.PING.rawValue)"
398400
let postData = postStr.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
399401
let postLength = "\(postData.length)"
@@ -418,13 +420,12 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
418420
}
419421
}
420422

421-
func sendPollMessage(msg:AnyObject, datas:[NSData]?) {
423+
func sendPollMessage(msg:String, datas:[NSData]?) {
422424
// println("Sending: \(msg)")
423425
var postData:NSData
424426
var bDatas:[String]?
425-
let time = Int(NSDate().timeIntervalSince1970)
426427
var req = NSMutableURLRequest(URL:
427-
NSURL(string:self.urlPolling! + "&t=\(time)&b64=1" + "&sid=\(self.sid)")!)
428+
NSURL(string:self.urlPolling! + "&sid=\(self.sid)")!)
428429

429430
req.HTTPMethod = "POST"
430431
req.setValue("application/html-text", forHTTPHeaderField: "Content-Type")
@@ -439,7 +440,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
439440
}
440441
}
441442

442-
let strMsg = "\(PacketType.MESSAGE.rawValue)\(msg as String)"
443+
let strMsg = "\(PacketType.MESSAGE.rawValue)\(msg)"
443444

444445
let postCount = countElements(strMsg)
445446
var postStr = "\(postCount):\(strMsg)"
@@ -459,12 +460,26 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
459460

460461
NSURLConnection.sendAsynchronousRequest(req, queue: self.workQueue) {[weak self] res, data, err in
461462
if err != nil {
462-
println(err)
463+
// println(err)
464+
self?.handlePollingFailed()
463465
return
464466
}
465467
}
466468
}
467469

470+
func sendWebSocketMessage(str:String, datas:[NSData]?) {
471+
self.ws?.send("\(PacketType.MESSAGE.rawValue)\(str)")
472+
473+
if datas != nil {
474+
for data in datas! {
475+
let (data, nilString) = self.createBinaryDataForSend(data)
476+
if data != nil {
477+
self.ws?.send(data!)
478+
}
479+
}
480+
}
481+
}
482+
468483
// Starts the ping timer
469484
private func startPingTimer() {
470485
if self.pingInterval == nil {
@@ -491,7 +506,6 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
491506
// Called when a message is recieved
492507
func webSocket(webSocket:SRWebSocket!, didReceiveMessage message:AnyObject?) {
493508
// println(message)
494-
495509
self.parseEngineMessage(message)
496510
}
497511

@@ -506,11 +520,13 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
506520
func webSocket(webSocket:SRWebSocket!, didCloseWithCode code:Int, reason:String!, wasClean:Bool) {
507521
self.websocketConnected = false
508522
self.probing = false
509-
self._websocket = false
510-
self._polling = true
511523
self.flushProbeWait()
512524

513-
self.client.webSocketDidCloseWithCode(code, reason: reason, wasClean: wasClean)
525+
if self.websocket {
526+
self._websocket = false
527+
self._polling = true
528+
self.client.webSocketDidCloseWithCode(code, reason: reason, wasClean: wasClean)
529+
}
514530
}
515531

516532
// Called when an error occurs.

SwiftIO/SocketIOClient.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,14 @@ class SocketIOClient {
121121
self.reconnecting = false
122122
}
123123

124+
// Server wants us to die
125+
func didForceClose() {
126+
self.closed = true
127+
self.connecting = false
128+
self.connected = false
129+
self.reconnecting = false
130+
}
131+
124132
// Sends a message with multiple args
125133
// If a message contains binary we have to send those
126134
// seperately.

0 commit comments

Comments
 (0)