From 0b84ec6ac979d86eec86cc28f174cdd51b113697 Mon Sep 17 00:00:00 2001 From: Erik Date: Wed, 28 Jan 2015 19:32:06 -0500 Subject: [PATCH] Add support for sending nested binary. TODO: add support for recieving nested binary --- SwiftIO/SocketIOClient.swift | 143 ++++++++++++++++++++++++++--------- 1 file changed, 106 insertions(+), 37 deletions(-) diff --git a/SwiftIO/SocketIOClient.swift b/SwiftIO/SocketIOClient.swift index d90d139..2cf96db 100644 --- a/SwiftIO/SocketIOClient.swift +++ b/SwiftIO/SocketIOClient.swift @@ -93,7 +93,7 @@ class SocketIOClient: NSObject, SRWebSocketDelegate { } // Creates a binary message, ready for sending - private func createBinaryDataForSend(data:NSData) -> NSData { + private class func createBinaryDataForSend(data:NSData) -> NSData { var byteArray = [UInt8](count: 1, repeatedValue: 0x0) byteArray[0] = 4 var mutData = NSMutableData(bytes: &byteArray, length: 1) @@ -119,43 +119,38 @@ class SocketIOClient: NSObject, SRWebSocketDelegate { for i in 0.. (NSArray, Bool, [NSData]?) { + var replacementArr = [AnyObject](count: arr.count, repeatedValue: 1) + var hasBinary = false + var recurse = false + var datas = [NSData]() + + if placeholders == -1 { + placeholders = 0 + } + + for g in 0.. AnyObject? { if data == nil { @@ -236,27 +283,49 @@ class SocketIOClient: NSObject, SRWebSocketDelegate { } // Parses a NSDictionary, looking for NSData objects - private func parseNSDictionary(dict:NSDictionary, placeholders:Int = 0) -> (NSDictionary, Bool, [NSData]?) { + private class func parseNSDictionary(dict:NSDictionary, var placeholders:Int) -> (NSDictionary, Bool, [NSData]?) { var returnDict = NSMutableDictionary() - var placeholder = placeholders - var containedData = false + var hasBinary = false + if placeholders == -1 { + placeholders = 0 + } var returnDatas = [NSData]() + for (key, value) in dict { if let binaryData = value as? NSData { - containedData = true - returnDatas.append(binaryData) - returnDict[key as String] = ["_placeholder": true, "num": placeholder] - placeholder++ + hasBinary = true + let sendData = self.createBinaryDataForSend(binaryData) + returnDatas.append(sendData) + returnDict[key as String] = ["_placeholder": true, "num": placeholders++] + } else if let arr = value as? NSArray { + let (replace, hadBinary, arrDatas) = self.parseArray(arr, placeholders: placeholders) + + if hadBinary { + hasBinary = true + returnDict[key as String] = replace + placeholders += arrDatas!.count + returnDatas.extend(arrDatas!) + } else { + returnDict[key as String] = arr + } + } else if let dict = value as? NSDictionary { + // Recursive + let (nestDict, hadBinary, nestDatas) = self.parseNSDictionary(dict, placeholders: placeholders) + + if hadBinary { + hasBinary = true + returnDict[key as String] = nestDict + placeholders += nestDatas!.count + returnDatas.extend(nestDatas!) + } else { + returnDict[key as String] = dict + } } else { returnDict[key as String] = value } } - if containedData { - return (returnDict, true, returnDatas) - } else { - return (returnDict, false, nil) - } + return (returnDict, hasBinary, returnDatas) } // Parses messages recieved