Skip to content

Commit 6399df4

Browse files
committed
tweaks
1 parent 14bf642 commit 6399df4

File tree

3 files changed

+99
-96
lines changed

3 files changed

+99
-96
lines changed

SwiftIO/SocketEngine.swift

Lines changed: 74 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -151,29 +151,29 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
151151
self.waitingForPoll = true
152152

153153
self.session.dataTaskWithRequest(req) {[weak self] data, res, err in
154-
if self == nil {
155-
return
156-
} else if err != nil {
157-
if self!.polling {
158-
self?.handlePollingFailed(err)
159-
}
160-
return
154+
if self == nil {
155+
return
156+
} else if err != nil {
157+
if self!.polling {
158+
self?.handlePollingFailed(err)
161159
}
160+
return
161+
}
162+
163+
// println(data)
164+
165+
if let str = NSString(data: data, encoding: NSUTF8StringEncoding) as? String {
166+
// println(str)
162167

163-
// println(data)
164-
165-
if let str = NSString(data: data, encoding: NSUTF8StringEncoding) as? String {
166-
// println(str)
167-
168-
dispatch_async(self?.parseQueue) {[weak self] in
169-
self?.parsePollingMessage(str)
170-
return
171-
}
168+
dispatch_async(self?.parseQueue) {[weak self] in
169+
self?.parsePollingMessage(str)
170+
return
172171
}
173-
174-
self?.waitingForPoll = false
175-
self?.doPoll()
176-
}.resume()
172+
}
173+
174+
self?.waitingForPoll = false
175+
self?.doPoll()
176+
}.resume()
177177
}
178178

179179
private func flushProbeWait() {
@@ -229,12 +229,16 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
229229
self?.handlePollingFailed(err)
230230
}
231231
return
232+
} else if self == nil {
233+
return
232234
}
233235

234-
self?.flushWaitingForPost()
235236
self?.waitingForPost = false
236-
self?.doPoll()
237-
}.resume()
237+
dispatch_async(self!.emitQueue) {
238+
self?.flushWaitingForPost()
239+
self?.doPoll()
240+
return
241+
}}.resume()
238242
}
239243

240244
// We had packets waiting for send when we upgraded
@@ -252,6 +256,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
252256
private func handlePollingFailed(reason:NSError?) {
253257
if !self.client.reconnecting {
254258
self.connected = false
259+
self.ws?.close()
255260
self.pingTimer?.invalidate()
256261
self.waitingForPoll = false
257262
self.waitingForPost = false
@@ -271,61 +276,58 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
271276
let reqPolling = NSURLRequest(URL: NSURL(string: urlPolling + "&b64=1")!)
272277

273278
self.session.dataTaskWithRequest(reqPolling) {[weak self] data, res, err in
274-
var err:NSError?
275-
if self == nil {
279+
var err2:NSError?
280+
if self == nil {
281+
return
282+
} else if err != nil || data == nil {
283+
self?.handlePollingFailed(err)
284+
return
285+
}
286+
287+
if let dataString = NSString(data: data, encoding: NSUTF8StringEncoding) {
288+
var mutString = RegexMutable(dataString)
289+
let parsed:[String]? = mutString["(\\d*):(\\d)(\\{.*\\})?"].groups()
290+
291+
if parsed == nil || parsed?.count != 4 {
276292
return
277-
} else if err != nil || data == nil {
278-
if self!.polling {
279-
self?.handlePollingFailed(err)
280-
}
293+
}
294+
295+
let length = parsed![1]
296+
let type = parsed![2]
297+
let jsonData = parsed![3].dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
298+
299+
if type != "0" {
300+
NSLog("Error handshaking")
281301
return
282302
}
283303

284-
if let dataString = NSString(data: data, encoding: NSUTF8StringEncoding) {
285-
var mutString = RegexMutable(dataString)
286-
let parsed = mutString["(\\d*):(\\d)(\\{.*\\})?"].groups()
287-
288-
if parsed.count != 4 {
289-
return
290-
}
291-
292-
let length = parsed[1]
293-
let type = parsed[2]
294-
let jsonData = parsed[3].dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
295-
296-
if type != "0" {
297-
NSLog("Error handshaking")
298-
return
299-
}
300-
301-
self?.connected = true
302-
303-
if let json = NSJSONSerialization.JSONObjectWithData(jsonData!,
304-
options: NSJSONReadingOptions.AllowFragments, error: &err) as? NSDictionary {
305-
if let sid = json["sid"] as? String {
306-
// println(json)
307-
self?.sid = sid
308-
309-
if !self!.forcePolling {
310-
self?.ws = SRWebSocket(URL:
311-
NSURL(string: urlWebSocket + "&sid=\(self!.sid)")!)
312-
self?.ws?.delegate = self
313-
self?.ws?.open()
314-
}
315-
} else {
316-
NSLog("Error handshaking")
317-
return
318-
}
304+
self?.connected = true
305+
306+
if let json = NSJSONSerialization.JSONObjectWithData(jsonData!,
307+
options: NSJSONReadingOptions.AllowFragments, error: &err2) as? NSDictionary {
308+
if let sid = json["sid"] as? String {
309+
// println(json)
310+
self?.sid = sid
319311

320-
if let pingInterval = json["pingInterval"] as? Int {
321-
self?.pingInterval = pingInterval / 1000
312+
if !self!.forcePolling {
313+
self?.ws = SRWebSocket(URL:
314+
NSURL(string: urlWebSocket + "&sid=\(self!.sid)")!)
315+
self?.ws?.delegate = self
316+
self?.ws?.open()
322317
}
323-
}
324-
325-
self?.doPoll()
326-
self?.startPingTimer()
318+
} else {
319+
NSLog("Error handshaking")
320+
return
321+
}
322+
323+
if let pingInterval = json["pingInterval"] as? Int {
324+
self?.pingInterval = pingInterval / 1000
325+
}
327326
}
328-
}.resume()
327+
328+
self?.doPoll()
329+
self?.startPingTimer()
330+
}}.resume()
329331
}
330332

331333
// Translatation of engine.io-parser#decodePayload
@@ -525,7 +527,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
525527
if self.pingInterval == nil {
526528
return
527529
}
528-
530+
529531
self.pingTimer?.invalidate()
530532
dispatch_async(dispatch_get_main_queue()) {
531533
self.pingTimer = NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(self.pingInterval!), target: self,

SwiftIO/SocketEventHandler.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ class SocketEventHandler {
4545

4646
func executeCallback(_ items:NSArray? = nil, withAck ack:Int? = nil, withAckType type:Int? = nil,
4747
withSocket socket:SocketIOClient? = nil) {
48-
callback?(items, ack != nil ? emitAckCallback(socket!, ack!, type!) : nil)
48+
dispatch_async(dispatch_get_main_queue()) {[weak self] in
49+
self?.callback?(items, ack != nil ? emitAckCallback(socket!, ack!, type!) : nil)
50+
return
51+
}
4952
}
5053
}

SwiftIO/SocketIOClient.swift

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -280,30 +280,28 @@ class SocketIOClient {
280280
}
281281
for handler in self.handlers {
282282
if handler.event == event {
283-
dispatch_async(dispatch_get_main_queue()) {
284-
if data is NSArray {
285-
if ack != nil {
286-
handler.executeCallback(data as? NSArray, withAck: ack!,
287-
withAckType: ackType, withSocket: self)
288-
} else {
289-
handler.executeCallback(data as? NSArray)
290-
}
283+
if data is NSArray {
284+
if ack != nil {
285+
handler.executeCallback(data as? NSArray, withAck: ack!,
286+
withAckType: ackType, withSocket: self)
291287
} else {
292-
293-
// Trying to do a ternary expression in the executeCallback method
294-
// seemed to crash Swift
295-
var dataArr:NSArray? = nil
296-
297-
if let data:AnyObject = data {
298-
dataArr = [data]
299-
}
300-
301-
if ack != nil {
302-
handler.executeCallback(dataArr, withAck: ack!,
303-
withAckType: ackType, withSocket: self)
304-
} else {
305-
handler.executeCallback(dataArr)
306-
}
288+
handler.executeCallback(data as? NSArray)
289+
}
290+
} else {
291+
292+
// Trying to do a ternary expression in the executeCallback method
293+
// seemed to crash Swift
294+
var dataArr:NSArray? = nil
295+
296+
if let data:AnyObject = data {
297+
dataArr = [data]
298+
}
299+
300+
if ack != nil {
301+
handler.executeCallback(dataArr, withAck: ack!,
302+
withAckType: ackType, withSocket: self)
303+
} else {
304+
handler.executeCallback(dataArr)
307305
}
308306
}
309307
}

0 commit comments

Comments
 (0)