diff --git a/Socket.IO-Client-Swift.podspec b/Socket.IO-Client-Swift.podspec index dc311d7..e689e1a 100644 --- a/Socket.IO-Client-Swift.podspec +++ b/Socket.IO-Client-Swift.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "Socket.IO-Client-Swift" - s.version = "1.1.3" + s.version = "1.1.4" s.summary = "Socket.IO-client for Swift" s.description = <<-DESC Socket.IO-client for Swift. @@ -12,7 +12,7 @@ Pod::Spec.new do |s| s.author = { "Erik" => "nuclear.ace@gmail.com" } s.ios.deployment_target = '8.0' s.osx.deployment_target = '10.10' - s.source = { :git => "https://github.com/socketio/socket.io-client-swift.git", :tag => 'v1.1.3' } + s.source = { :git => "https://github.com/socketio/socket.io-client-swift.git", :tag => 'v1.1.4' } s.source_files = "SwiftIO/**/*.swift" s.requires_arc = true # s.dependency 'Starscream', '~> 0.9' # currently this repo includes Starscream swift files diff --git a/SwiftIO/SocketParser.swift b/SwiftIO/SocketParser.swift index c41cea7..573d5cc 100644 --- a/SwiftIO/SocketParser.swift +++ b/SwiftIO/SocketParser.swift @@ -28,20 +28,20 @@ class SocketParser { var replacementArr = [AnyObject](count: arr.count, repeatedValue: 1) var hasBinary = false var arrayDatas = [NSData]() - + for g in 0.. AnyObject? { if data == nil { return nil } - + var err:NSError? let stringData = data!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) let parsed:AnyObject? = NSJSONSerialization.JSONObjectWithData(stringData!, options: NSJSONReadingOptions.AllowFragments, error: &err) - + if err != nil { // println(err) return nil } - + return parsed } - + class func parseEmitArgs(args:[AnyObject]) -> ([AnyObject], Bool, [NSData]) { var items = [AnyObject](count: args.count, repeatedValue: 1) var currentPlaceholder = -1 var hasBinary = false var emitDatas = [NSData]() - + for i in 0.. (NSDictionary, Bool, [NSData]) { var returnDict = NSMutableDictionary() var hasBinary = false var returnDatas = [NSData]() - + for (key, value) in dict { if let binaryData = value as? NSData { currentPlaceholder++ @@ -155,7 +155,7 @@ class SocketParser { returnDict[key as! String] = ["_placeholder": true, "num": currentPlaceholder] } else if let arr = value as? NSArray { let (replace, hadBinary, arrDatas) = self.parseArray(arr, currentPlaceholder: currentPlaceholder) - + if hadBinary { hasBinary = true returnDict[key as! String] = replace @@ -167,7 +167,7 @@ class SocketParser { } else if let dict = value as? NSDictionary { // Recursive let (nestDict, hadBinary, nestDatas) = self.parseNSDictionary(dict, currentPlaceholder: currentPlaceholder) - + if hadBinary { hasBinary = true returnDict[key as! String] = nestDict @@ -180,14 +180,14 @@ class SocketParser { returnDict[key as! String] = value } } - + return (returnDict, hasBinary, returnDatas) } - + // Parses messages recieved class func parseSocketMessage(stringMessage:String, socket:SocketIOClient) { // println(message!) - + // Check for successful namepsace connect if socket.nsp != nil { if stringMessage == "0/\(socket.nsp!)" { @@ -195,7 +195,7 @@ class SocketParser { return } } - + if stringMessage == "0" { if socket.nsp != nil { // Join namespace @@ -206,20 +206,20 @@ class SocketParser { return } } - + var mutMessage = RegexMutable(stringMessage) - + /** Begin check for message **/ let messageGroups = mutMessage["(\\d*)\\/?(\\w*)?,?(\\d*)?(\\[.*\\])?"].groups() - + if messageGroups[1].hasPrefix("2") { var mesNum = messageGroups[1] var ackNum:String var namespace:String? var messagePart:String! - + if messageGroups[3] != "" { ackNum = messageGroups[3] } else { @@ -228,25 +228,25 @@ class SocketParser { mesNum.replaceRange(range, with: "") ackNum = mesNum } - + namespace = messageGroups[2] messagePart = messageGroups[4] - + if namespace == "" && socket.nsp != nil { return } - + let messageInternals = RegexMutable(messagePart)["\\[\"(.*?)\",(.*?)?\\]$"].groups() if messageInternals != nil && messageInternals.count > 2 { let event = messageInternals[1] var data:String? - + if messageInternals[2] == "" { data = nil } else { data = messageInternals[2] } - + // It would be nice if socket.io only allowed one thing // per message, but alas, it doesn't. if let parsed:AnyObject = self.parseData(data) { @@ -257,7 +257,7 @@ class SocketParser { socket.handleEvent(event, data: parsed, isInternalMessage: false, wantsAck: ackNum.toInt(), withAckType: 3) } - + return } else if let strData = data { // There are multiple items in the message @@ -272,12 +272,12 @@ class SocketParser { socket.handleEvent(event, data: parsed, isInternalMessage: false, wantsAck: ackNum.toInt(), withAckType: 3) } - + return } } } - + // Check for no item event let noItemMessage = RegexMutable(messagePart)["\\[\"(.*?)\"]$"].groups() if noItemMessage != nil && noItemMessage.count == 2 { @@ -295,48 +295,48 @@ class SocketParser { let arr = Array(messageGroups[1]) var ackNum:String let nsp = messageGroups[2] - + if nsp == "" && socket.nsp != nil { return } - + if nsp == "" { ackNum = String(arr[1...arr.count-1]) } else { ackNum = messageGroups[3] } - + let ackData:AnyObject? = self.parseData(messageGroups[4]) socket.handleAck(ackNum.toInt()!, data: ackData) - + return } /** End Check for message **/ - + // Check for message with binary placeholders self.parseBinaryMessage(stringMessage, socket: socket) } - + // Handles binary data class func parseBinaryData(data:NSData, socket:SocketIOClient) { let shouldExecute = socket.waitingData[0].addData(data) - + if shouldExecute { let socketEvent = socket.waitingData.removeAtIndex(0) var event = socketEvent.event var parsedArgs:AnyObject? = self.parseData(socketEvent.args as? String) - + if let args:AnyObject = parsedArgs { let filledInArgs:AnyObject = socketEvent.fillInPlaceholders(args) - + if socketEvent.justAck! { // Should handle ack socket.handleAck(socketEvent.ack!, data: filledInArgs) return } - + // Should do event if socketEvent.ack != nil { socket.handleEvent(event, data: filledInArgs, isInternalMessage: false, @@ -346,13 +346,13 @@ class SocketParser { } } else { let filledInArgs:AnyObject = socketEvent.fillInPlaceholders() - + // Should handle ack if socketEvent.justAck! { socket.handleAck(socketEvent.ack!, data: filledInArgs) return } - + // Should handle ack if socketEvent.ack != nil { socket.handleEvent(event, data: filledInArgs, isInternalMessage: false, @@ -363,21 +363,21 @@ class SocketParser { } } } - + // Tries to parse a message that contains binary class func parseBinaryMessage(message:String, socket:SocketIOClient) { // println(message) var mutMessage = RegexMutable(message) - + /** Begin check for binary placeholders **/ let binaryGroup = mutMessage["^(\\d*)-\\/?(\\w*)?,?(\\d*)?\\[(\".*?\")?,?(.*)?\\]$"].groups() - + if binaryGroup == nil { return } - + if binaryGroup[1].hasPrefix("5") { // println(binaryGroup) var ackNum:String @@ -386,7 +386,7 @@ class SocketParser { var namespace:String? var numberOfPlaceholders:String let messageType = RegexMutable(binaryGroup[1]) - + namespace = binaryGroup[2] if binaryGroup[3] != "" { ackNum = binaryGroup[3] as String @@ -395,18 +395,18 @@ class SocketParser { } else { ackNum = "" } - + numberOfPlaceholders = (messageType["5"] ~= "") as String event = (RegexMutable(binaryGroup[4])["\""] ~= "") as String mutMessageObject = RegexMutable(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, @@ -416,14 +416,14 @@ class SocketParser { mes = SocketEvent(event: event, args: placeholdersRemoved, placeholders: numberOfPlaceholders.toInt()!, ackNum: ackNum.toInt()) } - + socket.waitingData.append(mes) } else if binaryGroup[1].hasPrefix("6") { let messageType = RegexMutable(binaryGroup[1]) let numberOfPlaceholders = (messageType["6"] ~= "") as String var ackNum:String var nsp:String - + if binaryGroup[3] == "" { ackNum = binaryGroup[2] nsp = "" @@ -431,21 +431,21 @@ class SocketParser { ackNum = binaryGroup[3] nsp = binaryGroup[2] } - + if nsp == "" && socket.nsp != nil { return } var mutMessageObject = RegexMutable(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 **/ } -} \ No newline at end of file +}