extract methods
This commit is contained in:
parent
bfeec57c04
commit
81ab71f519
@ -357,6 +357,40 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient {
|
|||||||
postWait.removeAll(keepCapacity: true)
|
postWait.removeAll(keepCapacity: true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func handleClose() {
|
||||||
|
if polling {
|
||||||
|
client?.engineDidClose("Disconnect")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func checkIfMessageIsBase64Binary(var message:String) {
|
||||||
|
if message.hasPrefix("b4") {
|
||||||
|
// binary in base64 string
|
||||||
|
message.removeRange(Range<String.Index>(start: message.startIndex,
|
||||||
|
end: advance(message.startIndex, 2)))
|
||||||
|
|
||||||
|
if let data = NSData(base64EncodedString: message,
|
||||||
|
options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters), client = client {
|
||||||
|
dispatch_async(client.handleQueue) {[weak self] in
|
||||||
|
self?.client?.parseBinaryData(data)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func handleMessage(message:String) {
|
||||||
|
// Remove message type
|
||||||
|
if let client = client {
|
||||||
|
dispatch_async(client.handleQueue) {[weak client] in
|
||||||
|
client?.parseSocketMessage(message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func handleNOOP() {
|
||||||
|
doPoll()
|
||||||
|
}
|
||||||
|
|
||||||
private func handleOpen(openData:String) {
|
private func handleOpen(openData:String) {
|
||||||
var err:NSError?
|
var err:NSError?
|
||||||
let mesData = openData.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
|
let mesData = openData.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
|
||||||
@ -387,6 +421,15 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func handlePong(pongMessage:String) {
|
||||||
|
pongsMissed = 0
|
||||||
|
|
||||||
|
// We should upgrade
|
||||||
|
if pongMessage == "3probe" {
|
||||||
|
upgradeTransport()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// A poll failed, tell the client about it
|
// A poll failed, tell the client about it
|
||||||
private func handlePollingFailed(reason:String) {
|
private func handlePollingFailed(reason:String) {
|
||||||
_connected = false
|
_connected = false
|
||||||
@ -468,18 +511,15 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient {
|
|||||||
} else {
|
} else {
|
||||||
if length == "" || testLength(length, &n) {
|
if length == "" || testLength(length, &n) {
|
||||||
SocketLogger.err("Parsing error: \(str)", client: self)
|
SocketLogger.err("Parsing error: \(str)", client: self)
|
||||||
|
|
||||||
handlePollingFailed("Error parsing XHR message")
|
handlePollingFailed("Error parsing XHR message")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
msg = String(strArray[i+1...i+n])
|
msg = String(strArray[i+1...i+n])
|
||||||
|
|
||||||
if let lengthInt = length.toInt() {
|
if let lengthInt = length.toInt() where lengthInt != count(msg) {
|
||||||
if lengthInt != count(msg) {
|
SocketLogger.err("parsing error: \(str)", client: self)
|
||||||
SocketLogger.err("parsing error: \(str)", client: self)
|
return
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if count(msg) != 0 {
|
if count(msg) != 0 {
|
||||||
@ -510,45 +550,23 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient {
|
|||||||
fixDoubleUTF8(&message)
|
fixDoubleUTF8(&message)
|
||||||
}
|
}
|
||||||
|
|
||||||
let type = PacketType(str: (message["^(\\d)"].groups()?[1]))
|
let type = PacketType(str: (message["^(\\d)"].groups()?[1])) ?? PacketType.NOOP
|
||||||
|
|
||||||
if type == PacketType.MESSAGE {
|
switch type {
|
||||||
// Remove message type
|
case PacketType.MESSAGE:
|
||||||
message.removeAtIndex(message.startIndex)
|
message.removeAtIndex(message.startIndex)
|
||||||
|
handleMessage(message)
|
||||||
if let client = client {
|
case PacketType.NOOP:
|
||||||
dispatch_async(client.handleQueue) {[weak client] in
|
handleNOOP()
|
||||||
client?.parseSocketMessage(message)
|
case PacketType.PONG:
|
||||||
}
|
handlePong(message)
|
||||||
}
|
case PacketType.OPEN:
|
||||||
} else if type == PacketType.NOOP {
|
|
||||||
doPoll()
|
|
||||||
} else if type == PacketType.PONG {
|
|
||||||
pongsMissed = 0
|
|
||||||
|
|
||||||
// We should upgrade
|
|
||||||
if message == "3probe" {
|
|
||||||
upgradeTransport()
|
|
||||||
}
|
|
||||||
} else if type == PacketType.OPEN {
|
|
||||||
message.removeAtIndex(message.startIndex)
|
message.removeAtIndex(message.startIndex)
|
||||||
|
|
||||||
handleOpen(message)
|
handleOpen(message)
|
||||||
} else if type == PacketType.CLOSE {
|
case PacketType.CLOSE:
|
||||||
if polling {
|
handleClose()
|
||||||
client?.engineDidClose("Disconnect")
|
default:
|
||||||
}
|
checkIfMessageIsBase64Binary(message)
|
||||||
} else if message.hasPrefix("b4") {
|
|
||||||
// binary in base64 string
|
|
||||||
message.removeRange(Range<String.Index>(start: message.startIndex,
|
|
||||||
end: advance(message.startIndex, 2)))
|
|
||||||
|
|
||||||
if let data = NSData(base64EncodedString: message,
|
|
||||||
options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters), client = client {
|
|
||||||
dispatch_async(client.handleQueue) {[weak self] in
|
|
||||||
self?.client?.parseBinaryData(data)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user