Skip to content

Commit 81ab71f

Browse files
committed
extract methods
1 parent bfeec57 commit 81ab71f

File tree

1 file changed

+60
-42
lines changed

1 file changed

+60
-42
lines changed

SocketIOClientSwift/SocketEngine.swift

Lines changed: 60 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient {
220220
if websocket || waitingForPoll || !connected {
221221
return
222222
}
223-
223+
224224
waitingForPoll = true
225225
let req = NSMutableURLRequest(URL: NSURL(string: urlPolling! + "&sid=\(sid)&b64=1")!)
226226

@@ -357,6 +357,40 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient {
357357
postWait.removeAll(keepCapacity: true)
358358
}
359359

360+
private func handleClose() {
361+
if polling {
362+
client?.engineDidClose("Disconnect")
363+
}
364+
}
365+
366+
private func checkIfMessageIsBase64Binary(var message:String) {
367+
if message.hasPrefix("b4") {
368+
// binary in base64 string
369+
message.removeRange(Range<String.Index>(start: message.startIndex,
370+
end: advance(message.startIndex, 2)))
371+
372+
if let data = NSData(base64EncodedString: message,
373+
options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters), client = client {
374+
dispatch_async(client.handleQueue) {[weak self] in
375+
self?.client?.parseBinaryData(data)
376+
}
377+
}
378+
}
379+
}
380+
381+
private func handleMessage(message:String) {
382+
// Remove message type
383+
if let client = client {
384+
dispatch_async(client.handleQueue) {[weak client] in
385+
client?.parseSocketMessage(message)
386+
}
387+
}
388+
}
389+
390+
private func handleNOOP() {
391+
doPoll()
392+
}
393+
360394
private func handleOpen(openData:String) {
361395
var err:NSError?
362396
let mesData = openData.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
@@ -387,6 +421,15 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient {
387421
}
388422
}
389423

424+
private func handlePong(pongMessage:String) {
425+
pongsMissed = 0
426+
427+
// We should upgrade
428+
if pongMessage == "3probe" {
429+
upgradeTransport()
430+
}
431+
}
432+
390433
// A poll failed, tell the client about it
391434
private func handlePollingFailed(reason:String) {
392435
_connected = false
@@ -468,18 +511,15 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient {
468511
} else {
469512
if length == "" || testLength(length, &n) {
470513
SocketLogger.err("Parsing error: \(str)", client: self)
471-
472514
handlePollingFailed("Error parsing XHR message")
473515
return
474516
}
475517

476518
msg = String(strArray[i+1...i+n])
477519

478-
if let lengthInt = length.toInt() {
479-
if lengthInt != count(msg) {
480-
SocketLogger.err("parsing error: \(str)", client: self)
481-
return
482-
}
520+
if let lengthInt = length.toInt() where lengthInt != count(msg) {
521+
SocketLogger.err("parsing error: \(str)", client: self)
522+
return
483523
}
484524

485525
if count(msg) != 0 {
@@ -510,45 +550,23 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient {
510550
fixDoubleUTF8(&message)
511551
}
512552

513-
let type = PacketType(str: (message["^(\\d)"].groups()?[1]))
553+
let type = PacketType(str: (message["^(\\d)"].groups()?[1])) ?? PacketType.NOOP
514554

515-
if type == PacketType.MESSAGE {
516-
// Remove message type
555+
switch type {
556+
case PacketType.MESSAGE:
517557
message.removeAtIndex(message.startIndex)
518-
519-
if let client = client {
520-
dispatch_async(client.handleQueue) {[weak client] in
521-
client?.parseSocketMessage(message)
522-
}
523-
}
524-
} else if type == PacketType.NOOP {
525-
doPoll()
526-
} else if type == PacketType.PONG {
527-
pongsMissed = 0
528-
529-
// We should upgrade
530-
if message == "3probe" {
531-
upgradeTransport()
532-
}
533-
} else if type == PacketType.OPEN {
558+
handleMessage(message)
559+
case PacketType.NOOP:
560+
handleNOOP()
561+
case PacketType.PONG:
562+
handlePong(message)
563+
case PacketType.OPEN:
534564
message.removeAtIndex(message.startIndex)
535-
536565
handleOpen(message)
537-
} else if type == PacketType.CLOSE {
538-
if polling {
539-
client?.engineDidClose("Disconnect")
540-
}
541-
} else if message.hasPrefix("b4") {
542-
// binary in base64 string
543-
message.removeRange(Range<String.Index>(start: message.startIndex,
544-
end: advance(message.startIndex, 2)))
545-
546-
if let data = NSData(base64EncodedString: message,
547-
options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters), client = client {
548-
dispatch_async(client.handleQueue) {[weak self] in
549-
self?.client?.parseBinaryData(data)
550-
}
551-
}
566+
case PacketType.CLOSE:
567+
handleClose()
568+
default:
569+
checkIfMessageIsBase64Binary(message)
552570
}
553571
}
554572

0 commit comments

Comments
 (0)