diff --git a/SwiftIO/SocketParser.swift b/SwiftIO/SocketParser.swift index dc02fd4..e6d2a31 100644 --- a/SwiftIO/SocketParser.swift +++ b/SwiftIO/SocketParser.swift @@ -220,9 +220,6 @@ class SocketParser { return } - /** - Begin check for message - **/ var messageGroups:[String]? let type = stringMessage.removeAtIndex(stringMessage.startIndex) @@ -231,7 +228,7 @@ class SocketParser { if let groups = stringMessage["(\\d*)\\/?(\\w*)?,?(\\d*)?\\[\"(.*?)\",?(.*?)?\\]$", NSRegularExpressionOptions.DotMatchesLineSeparators].groups() { messageGroups = groups - + var mesNum = messageGroups![1] var ackNum:String var namespace:String? @@ -264,10 +261,7 @@ class SocketParser { socket.handleEvent(event, data: parsed, isInternalMessage: false, wantsAck: ackNum.toInt(), withAckType: 3) } - - return } - } } else if type == "3" { if let ackGroup = stringMessage["(\\d*)\\/?(\\w*)?,?(\\d*)?\\[(.*?)?\\]$", @@ -290,13 +284,11 @@ class SocketParser { let ackData:AnyObject? = self.parseData("[\(messageGroups![4])]") socket.handleAck(ackNum.toInt()!, data: ackData) - - return } + } else { + NSLog("Error in parsing message: %s", stringMessage) + return } - /** - End Check for message - **/ } // Handles binary data @@ -352,94 +344,87 @@ class SocketParser { } // Tries to parse a message that contains binary - class func parseBinaryMessage(message:String, socket:SocketIOClient) { + class func parseBinaryMessage(var message:String, socket:SocketIOClient) { // NSLog(message) - /** - Begin check for binary placeholders - **/ var binaryGroup:[String]? - if let groups = message["^(\\d*)-\\/?(\\w*)?,?(\\d*)?\\[(\".*?\")?,?(.*)?\\]$", - NSRegularExpressionOptions.DotMatchesLineSeparators].groups() { - binaryGroup = groups - } else if let groups = message["^(\\d*)-\\/?(\\w*)?,?(\\d*)?\\[(.*?)?\\]$", - NSRegularExpressionOptions.DotMatchesLineSeparators].groups() { - binaryGroup = groups + let type = message.removeAtIndex(message.startIndex) + + if type == "5" { + if let groups = message["^(\\d*)-\\/?(\\w*)?,?(\\d*)?\\[(\".*?\")?,?(.*)?\\]$", + NSRegularExpressionOptions.DotMatchesLineSeparators].groups() { + binaryGroup = groups + + var ackNum:String + var event:String + var mutMessageObject:String + var namespace:String? + let numberOfPlaceholders = binaryGroup![1] + + namespace = binaryGroup![2] + if binaryGroup![3] != "" { + ackNum = binaryGroup![3] as String + } else if socket.nsp == nil && binaryGroup![2] != "" { + ackNum = binaryGroup![2] + } else { + ackNum = "" + } + + event = (binaryGroup![4]["\""] ~= "") as String + mutMessageObject = binaryGroup![5] + + if namespace == "" && socket.nsp != nil { + return + } + + let placeholdersRemoved = mutMessageObject["(\\{\"_placeholder\":true,\"num\":(\\d*)\\})"] + ~= "\"~~$2\"" + + var mes:SocketEvent + if ackNum == "" { + mes = SocketEvent(event: event, args: placeholdersRemoved, + placeholders: numberOfPlaceholders.toInt()!) + } else { + socket.currentAck = ackNum.toInt()! + mes = SocketEvent(event: event, args: placeholdersRemoved, + placeholders: numberOfPlaceholders.toInt()!, ackNum: ackNum.toInt()) + } + + socket.waitingData.append(mes) + } + } else if type == "6" { + if let groups = message["^(\\d*)-\\/?(\\w*)?,?(\\d*)?\\[(.*?)?\\]$", + NSRegularExpressionOptions.DotMatchesLineSeparators].groups() { + binaryGroup = groups + + let numberOfPlaceholders = binaryGroup![1] + var ackNum:String + var nsp:String + + if binaryGroup![3] == "" { + ackNum = binaryGroup![2] + nsp = "" + } else { + ackNum = binaryGroup![3] + nsp = binaryGroup![2] + } + + if nsp == "" && socket.nsp != nil { + return + } + var mutMessageObject = binaryGroup![5] + let placeholdersRemoved = mutMessageObject["(\\{\"_placeholder\":true,\"num\":(\\d*)\\})"] + ~= "\"~~$2\"" + + let event = SocketEvent(event: "", args: placeholdersRemoved, + placeholders: numberOfPlaceholders.toInt()!, ackNum: ackNum.toInt(), justAck: true) + + socket.waitingData.append(event) + } } else { NSLog("Error in parsing binary message: %s", message) return } - - if binaryGroup![1].hasPrefix("5") { - // println(binaryGroup) - var ackNum:String - var event:String - var mutMessageObject:String - var namespace:String? - var numberOfPlaceholders:String - - let messageType = binaryGroup![1] - - namespace = binaryGroup![2] - if binaryGroup![3] != "" { - ackNum = binaryGroup![3] as String - } else if socket.nsp == nil && binaryGroup![2] != "" { - ackNum = binaryGroup![2] - } else { - ackNum = "" - } - - numberOfPlaceholders = (messageType["5"] ~= "") as String - event = (binaryGroup![4]["\""] ~= "") as String - mutMessageObject = binaryGroup![5] - - if namespace == "" && socket.nsp != nil { - return - } - - let placeholdersRemoved = mutMessageObject["(\\{\"_placeholder\":true,\"num\":(\\d*)\\})"] - ~= "\"~~$2\"" - - var mes:SocketEvent - if ackNum == "" { - mes = SocketEvent(event: event, args: placeholdersRemoved, - placeholders: numberOfPlaceholders.toInt()!) - } else { - socket.currentAck = ackNum.toInt()! - mes = SocketEvent(event: event, args: placeholdersRemoved, - placeholders: numberOfPlaceholders.toInt()!, ackNum: ackNum.toInt()) - } - - socket.waitingData.append(mes) - } else if binaryGroup![1].hasPrefix("6") { - let messageType = binaryGroup![1] - let numberOfPlaceholders = (messageType["6"] ~= "") as String - var ackNum:String - var nsp:String - - if binaryGroup![3] == "" { - ackNum = binaryGroup![2] - nsp = "" - } else { - ackNum = binaryGroup![3] - nsp = binaryGroup![2] - } - - if nsp == "" && socket.nsp != nil { - return - } - var mutMessageObject = binaryGroup![5] - let placeholdersRemoved = mutMessageObject["(\\{\"_placeholder\":true,\"num\":(\\d*)\\})"] - ~= "\"~~$2\"" - - let event = SocketEvent(event: "", args: placeholdersRemoved, - placeholders: numberOfPlaceholders.toInt()!, ackNum: ackNum.toInt(), justAck: true) - - socket.waitingData.append(event) - } - /** - End check for binary placeholders - **/ } }