From 8b893ad85e873ab8bf906b63111077628e24e16d Mon Sep 17 00:00:00 2001 From: Erik Date: Sat, 21 Mar 2015 18:16:09 -0400 Subject: [PATCH 1/7] refactor --- SwiftIO/SocketEngine.swift | 8 +- SwiftIO/SocketEventHandler.swift | 6 +- SwiftIO/SocketIOClient.swift | 77 ++++------- SwiftIO/SocketPacket.swift | 70 +++++----- SwiftIO/SocketParser.swift | 211 ++++++++++--------------------- 5 files changed, 129 insertions(+), 243 deletions(-) diff --git a/SwiftIO/SocketEngine.swift b/SwiftIO/SocketEngine.swift index 911c12b..5621321 100644 --- a/SwiftIO/SocketEngine.swift +++ b/SwiftIO/SocketEngine.swift @@ -476,9 +476,7 @@ public class SocketEngine: NSObject, WebSocketDelegate { } } - /* - Send a message with type 4 - */ + /// Send an engine message (4) public func send(msg:String, withData datas:[NSData]?) { if self.probing { self.probeWait.append((msg, PacketType.MESSAGE, datas)) @@ -565,10 +563,10 @@ public class SocketEngine: NSObject, WebSocketDelegate { } if self!.websocket { - // NSLog("writing ws: \(msg):\(datas)") + // NSLog("writing ws: \(msg):\(data)") self?.sendWebSocketMessage(msg, withType: type, datas: data) } else { - // NSLog("writing poll: \(msg):\(datas)") + // NSLog("writing poll: \(msg):\(data)") self?.sendPollMessage(msg, withType: type, datas: data) } } diff --git a/SwiftIO/SocketEventHandler.swift b/SwiftIO/SocketEventHandler.swift index 1922e02..82fd69b 100644 --- a/SwiftIO/SocketEventHandler.swift +++ b/SwiftIO/SocketEventHandler.swift @@ -28,10 +28,10 @@ public typealias NormalCallback = (NSArray?, AckEmitter?) -> Void public typealias AnyHandler = (event:String, items:AnyObject?) public typealias AckEmitter = (AnyObject...) -> Void -private func emitAckCallback(socket:SocketIOClient, num:Int, type:Int) +private func emitAckCallback(socket:SocketIOClient, num:Int) // Curried (items:AnyObject...) -> Void { - socket.emitAck(num, withData: items, withAckType: type) + socket.emitAck(num, withData: items) } class SocketEventHandler { @@ -46,7 +46,7 @@ class SocketEventHandler { func executeCallback(_ items:NSArray? = nil, withAck ack:Int? = nil, withAckType type:Int? = nil, withSocket socket:SocketIOClient? = nil) { dispatch_async(dispatch_get_main_queue()) {[weak self] in - self?.callback?(items, ack != nil ? emitAckCallback(socket!, ack!, type!) : nil) + self?.callback?(items, ack != nil ? emitAckCallback(socket!, ack!) : nil) return } } diff --git a/SwiftIO/SocketIOClient.swift b/SwiftIO/SocketIOClient.swift index 425d949..662363c 100644 --- a/SwiftIO/SocketIOClient.swift +++ b/SwiftIO/SocketIOClient.swift @@ -27,22 +27,22 @@ import Foundation public class SocketIOClient: NSObject, SocketEngineClient { let reconnectAttempts:Int! private lazy var params = [String: AnyObject]() - private var ackHandlers = [SocketAckHandler]() + private var ackHandlers = ContiguousArray() private var anyHandler:((AnyHandler) -> Void)? private var _closed = false private var _connected = false private var _connecting = false private var currentReconnectAttempt = 0 private var forcePolling = false - private var handlers = [SocketEventHandler]() + private var handlers = ContiguousArray() private var paramConnect = false private var _secure = false private var _sid:String? private var _reconnecting = false private var reconnectTimer:NSTimer? - internal var currentAck = -1 - internal var waitingData = [SocketPacket]() + var currentAck = -1 + var waitingData = ContiguousArray() public let socketURL:String public let ackQueue = dispatch_queue_create("ackQueue".cStringUsingEncoding(NSUTF8StringEncoding), @@ -62,7 +62,7 @@ public class SocketIOClient: NSObject, SocketEngineClient { } public var cookies:[NSHTTPCookie]? public var engine:SocketEngine? - public var nsp:String? + public var nsp = "/" public var reconnects = true public var reconnecting:Bool { return self._reconnecting @@ -244,69 +244,40 @@ public class SocketIOClient: NSObject, SocketEngineClient { } private func _emit(event:String, _ args:[AnyObject], ack:Int? = nil) { - var frame:SocketPacket - var str:String - - let (items, hasBinary, emitDatas) = SocketParser.parseEmitArgs(args) - if !self.connected { return } - if hasBinary { - if ack == nil { - str = SocketPacket.createMessageForEvent(event, withArgs: items, - hasBinary: true, withDatas: emitDatas.count, toNamespace: self.nsp) - } else { - str = SocketPacket.createMessageForEvent(event, withArgs: items, - hasBinary: true, withDatas: emitDatas.count, toNamespace: self.nsp, wantsAck: ack) - } - - self.engine?.send(str, withData: emitDatas) + let packet = SocketPacket(type: nil, data: args, nsp: self.nsp, id: ack) + var str:String + + SocketParser.parseForEmit(packet) + str = packet.createMessageForEvent(event) + + if packet.type == SocketPacketType.BINARY_EVENT { + self.engine?.send(str, withData: packet.binary) } else { - if ack == nil { - str = SocketPacket.createMessageForEvent(event, withArgs: items, hasBinary: false, - withDatas: 0, toNamespace: self.nsp) - } else { - str = SocketPacket.createMessageForEvent(event, withArgs: items, hasBinary: false, - withDatas: 0, toNamespace: self.nsp, wantsAck: ack) - } - self.engine?.send(str, withData: nil) } } // If the server wants to know that the client received data - func emitAck(ack:Int, withData data:[AnyObject]?, withAckType ackType:Int) { + func emitAck(ack:Int, withData args:[AnyObject]?) { dispatch_async(self.ackQueue) {[weak self] in - if self == nil || !self!.connected || data == nil { + if self == nil || !self!.connected || args == nil { return } - // println("sending ack: \(ack) \(data)") - let (items, hasBinary, emitDatas) = SocketParser.parseEmitArgs(data!) + let packet = SocketPacket(type: nil, data: args, nsp: self!.nsp, id: ack) var str:String - if !hasBinary { - if self?.nsp == nil { - str = SocketPacket.createAck(ack, withArgs: items, - withAckType: 3, withNsp: "/") - } else { - str = SocketPacket.createAck(ack, withArgs: items, - withAckType: 3, withNsp: self!.nsp!) - } - - self?.engine?.send(str, withData: nil) + SocketParser.parseForEmit(packet) + str = packet.createAck() + + if packet.type == SocketPacketType.BINARY_ACK { + self?.engine?.send(str, withData: packet.binary) } else { - if self?.nsp == nil { - str = SocketPacket.createAck(ack, withArgs: items, - withAckType: 6, withNsp: "/", withBinary: emitDatas.count) - } else { - str = SocketPacket.createAck(ack, withArgs: items, - withAckType: 6, withNsp: self!.nsp!, withBinary: emitDatas.count) - } - - self?.engine?.send(str, withData: emitDatas) + self?.engine?.send(str, withData: nil) } } } @@ -361,8 +332,8 @@ public class SocketIOClient: NSObject, SocketEngineClient { // Should be removed and moved to SocketEngine func joinNamespace() { - if self.nsp != nil { - self.engine?.send("0/\(self.nsp!)", withData: nil) + if self.nsp != "/" { + self.engine?.send("0/\(self.nsp)", withData: nil) } } diff --git a/SwiftIO/SocketPacket.swift b/SwiftIO/SocketPacket.swift index 7d7c063..0083c85 100644 --- a/SwiftIO/SocketPacket.swift +++ b/SwiftIO/SocketPacket.swift @@ -43,7 +43,6 @@ enum SocketPacketType: Int { } class SocketPacket { - let type:SocketPacketType var binary = [NSData]() var currentPlace = 0 var data:[AnyObject]? @@ -51,8 +50,9 @@ class SocketPacket { var justAck = false var nsp = "" var placeholders:Int? + var type:SocketPacketType? - init(type:SocketPacketType, data:[AnyObject]? = nil, nsp:String = "", + init(type:SocketPacketType?, data:[AnyObject]? = nil, nsp:String = "", placeholders:Int? = nil, id:Int? = nil) { self.type = type self.data = data @@ -62,10 +62,9 @@ class SocketPacket { } /// Only call if you know data is not nil - func createBinaryPlaceHolders() { - var strData = "\(self.data!)" - println(strData) - } +// func createBinaryPlaceHolders() { +// var strData = "\(self.data!)" +// } func getEvent() -> String { return data?.removeAtIndex(0) as String @@ -95,76 +94,77 @@ class SocketPacket { } } - class func createMessageForEvent(event:String, withArgs args:[AnyObject], - hasBinary:Bool, withDatas datas:Int = 0, toNamespace nsp:String?, wantsAck ack:Int? = nil) -> String { - + func createMessageForEvent(event:String) -> String { var message:String var jsonSendError:NSError? - if !hasBinary { - if nsp == nil { - if ack == nil { + if self.binary.count == 0 { + self.type = SocketPacketType.EVENT + + if self.nsp == "/" { + if self.id == nil { message = "2[\"\(event)\"" } else { - message = "2\(ack!)[\"\(event)\"" + message = "2\(self.id!)[\"\(event)\"" } } else { - if ack == nil { - message = "2/\(nsp!),[\"\(event)\"" + if self.id == nil { + message = "2/\(self.nsp),[\"\(event)\"" } else { - message = "2/\(nsp!),\(ack!)[\"\(event)\"" + message = "2/\(self.nsp),\(self.id!)[\"\(event)\"" } } } else { - if nsp == nil { - if ack == nil { - message = "5\(datas)-[\"\(event)\"" + self.type = SocketPacketType.BINARY_EVENT + + if self.nsp == "/" { + if self.id == nil { + message = "5\(self.binary.count)-[\"\(event)\"" } else { - message = "5\(datas)-\(ack!)[\"\(event)\"" + message = "5\(self.binary.count)-\(self.id!)[\"\(event)\"" } } else { - if ack == nil { - message = "5\(datas)-/\(nsp!),[\"\(event)\"" + if self.id == nil { + message = "5\(self.binary.count)-/\(self.nsp),[\"\(event)\"" } else { - message = "5\(datas)-/\(nsp!),\(ack!)[\"\(event)\"" + message = "5\(self.binary.count)-/\(self.nsp),\(self.id!)[\"\(event)\"" } } } - return self.completeMessage(message, args: args) + return self.completeMessage(message) } - class func createAck(ack:Int, withArgs args:[AnyObject], withAckType ackType:Int, - withNsp nsp:String, withBinary binary:Int = 0) -> String { + func createAck() -> String { var msg:String - if ackType == 3 { + if self.binary.count == 0 { if nsp == "/" { - msg = "3\(ack)[" + msg = "3\(self.id!)[" } else { - msg = "3/\(nsp),\(ack)[" + msg = "3/\(self.nsp),\(self.id!)[" } } else { if nsp == "/" { - msg = "6\(binary)-\(ack)[" + msg = "6\(self.binary.count)-\(self.id!)[" } else { - msg = "6\(binary)-/\(nsp),\(ack)[" + msg = "6\(self.binary.count)-/\(self.nsp),\(self.id!)[" } } - return self.completeMessage(msg, args: args, ack: true) + return self.completeMessage(msg, ack: true) } - private class func completeMessage(var message:String, args:[AnyObject], ack:Bool = false) -> String { + func completeMessage(var message:String, ack:Bool = false) -> String { var err:NSError? - if args.count == 0 { + if self.data == nil || self.data!.count == 0 { return message + "]" } else if !ack { message += "," } - for arg in args { + for arg in self.data! { if arg is NSDictionary || arg is [AnyObject] { let jsonSend = NSJSONSerialization.dataWithJSONObject(arg, diff --git a/SwiftIO/SocketParser.swift b/SwiftIO/SocketParser.swift index 0f24e64..aed7e58 100644 --- a/SwiftIO/SocketParser.swift +++ b/SwiftIO/SocketParser.swift @@ -22,7 +22,64 @@ import Foundation +private let shredder = SocketParser.Deconstructor() + class SocketParser { + // Translation of socket.io-parser#deconstructPacket + private class Deconstructor { + var buf = [NSData]() + + func ripAndTear(data:AnyObject) -> AnyObject { + if let bin = data as? NSData { + let placeholder = ["_placeholder" :true, "num": buf.count] + + buf.append(bin) + + return placeholder + } + + if var arr = data as? [AnyObject] { + // var arr = data as [AnyObject] + for i in 0.. SocketPacket? { let arr = Array(str) @@ -48,7 +105,6 @@ class SocketParser { } if buf.toInt() == nil || arr[i] != "-" { - println(buf) NSLog("Error parsing \(str)") return nil } else { @@ -102,54 +158,6 @@ class SocketParser { return nil } - // Parse an NSArray looking for binary data - class func parseArray(arr:NSArray, var currentPlaceholder:Int) -> (NSArray, Bool, [NSData]) { - var replacementArr = [AnyObject](count: arr.count, repeatedValue: 1) - var hasBinary = false - var arrayDatas = [NSData]() - - for g in 0.. AnyObject? { var err:NSError? @@ -165,116 +173,25 @@ class SocketParser { 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++ - hasBinary = true - returnDatas.append(binaryData) - 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 - currentPlaceholder += 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, currentPlaceholder: currentPlaceholder) - - if hadBinary { - hasBinary = true - returnDict[key as String] = nestDict - currentPlaceholder += nestDatas.count - returnDatas.extend(nestDatas) - } else { - returnDict[key as String] = dict - } - } else { - returnDict[key as String] = value - } - } - - return (returnDict, hasBinary, returnDatas) + class func parseForEmit(packet:SocketPacket) { + shredder.deconstructPacket(packet) } // Parses messages recieved - class func parseSocketMessage(var stringMessage:String, socket:SocketIOClient) { + class func parseSocketMessage(stringMessage:String, socket:SocketIOClient) { if stringMessage == "" { return } func checkNSP(nsp:String) -> Bool { - if nsp == "" && socket.nsp != nil { + if nsp == "" && socket.nsp != "/" { return true } else { return false } } - var p = parseString(stringMessage) as SocketPacket! - + let p = parseString(stringMessage) as SocketPacket! if p.type == SocketPacketType.EVENT { if checkNSP(p.nsp) { @@ -302,9 +219,9 @@ class SocketParser { p.justAck = true socket.waitingData.append(p) } else if p.type == SocketPacketType.CONNECT { - if p.nsp == "" && socket.nsp != nil { + if p.nsp == "" && socket.nsp != "/" { socket.joinNamespace() - } else if p.nsp != "" && socket.nsp == nil { + } else if p.nsp != "" && socket.nsp == "/" { socket.didConnect() } else { socket.didConnect() From 4629565aafbf8bac3e1efecd4ab52a3af5e49a11 Mon Sep 17 00:00:00 2001 From: Erik Date: Sun, 22 Mar 2015 08:39:24 -0400 Subject: [PATCH 2/7] clean up --- SwiftIO/SocketPacket.swift | 5 ----- SwiftIO/SocketParser.swift | 3 --- 2 files changed, 8 deletions(-) diff --git a/SwiftIO/SocketPacket.swift b/SwiftIO/SocketPacket.swift index 0083c85..f521baa 100644 --- a/SwiftIO/SocketPacket.swift +++ b/SwiftIO/SocketPacket.swift @@ -61,11 +61,6 @@ class SocketPacket { self.id = id } - /// Only call if you know data is not nil -// func createBinaryPlaceHolders() { -// var strData = "\(self.data!)" -// } - func getEvent() -> String { return data?.removeAtIndex(0) as String } diff --git a/SwiftIO/SocketParser.swift b/SwiftIO/SocketParser.swift index aed7e58..d77fab5 100644 --- a/SwiftIO/SocketParser.swift +++ b/SwiftIO/SocketParser.swift @@ -39,15 +39,12 @@ class SocketParser { } if var arr = data as? [AnyObject] { - // var arr = data as [AnyObject] for i in 0.. Date: Sun, 22 Mar 2015 09:53:25 -0400 Subject: [PATCH 3/7] tweaks --- SwiftIO/SocketEngine.swift | 30 +++++++++++++++--------------- SwiftIO/SocketPacket.swift | 2 +- SwiftIO/SocketParser.swift | 8 +++----- 3 files changed, 19 insertions(+), 21 deletions(-) diff --git a/SwiftIO/SocketEngine.swift b/SwiftIO/SocketEngine.swift index 5621321..c8be3ab 100644 --- a/SwiftIO/SocketEngine.swift +++ b/SwiftIO/SocketEngine.swift @@ -30,7 +30,7 @@ extension String { } } -private typealias Probe = (msg:String, type:PacketType, data:[NSData]?) +private typealias Probe = (msg:String, type:PacketType, data:ContiguousArray?) private typealias ProbeWaitQueue = [Probe] public enum PacketType: String { @@ -477,7 +477,7 @@ public class SocketEngine: NSObject, WebSocketDelegate { } /// Send an engine message (4) - public func send(msg:String, withData datas:[NSData]?) { + public func send(msg:String, withData datas:ContiguousArray?) { if self.probing { self.probeWait.append((msg, PacketType.MESSAGE, datas)) } else { @@ -494,9 +494,8 @@ public class SocketEngine: NSObject, WebSocketDelegate { } private func sendPollMessage(var msg:String, withType type:PacketType, - datas:[NSData]? = nil) { + datas:ContiguousArray? = nil) { // println("Sending poll: \(msg) as type: \(type.rawValue)") - doubleEncodeUTF8(&msg) let strMsg = "\(type.rawValue)\(msg)" @@ -515,18 +514,19 @@ public class SocketEngine: NSObject, WebSocketDelegate { } } - private func sendWebSocketMessage(str:String, withType type:PacketType, datas:[NSData]? = nil) { - // println("Sending ws: \(str) as type: \(type.rawValue)") - self.ws?.writeString("\(type.rawValue)\(str)") - - if datas != nil { - for data in datas! { - let (data, nilString) = self.createBinaryDataForSend(data) - if data != nil { - self.ws?.writeData(data!) + private func sendWebSocketMessage(str:String, withType type:PacketType, + datas:ContiguousArray? = nil) { + // println("Sending ws: \(str) as type: \(type.rawValue)") + self.ws?.writeString("\(type.rawValue)\(str)") + + if datas != nil { + for data in datas! { + let (data, nilString) = self.createBinaryDataForSend(data) + if data != nil { + self.ws?.writeData(data!) + } } } - } } // Starts the ping timer @@ -552,7 +552,7 @@ public class SocketEngine: NSObject, WebSocketDelegate { } } - public func write(msg:String, withType type:PacketType, withData data:[NSData]?) { + public func write(msg:String, withType type:PacketType, withData data:ContiguousArray?) { dispatch_async(self.emitQueue) {[weak self] in if self == nil { return diff --git a/SwiftIO/SocketPacket.swift b/SwiftIO/SocketPacket.swift index f521baa..7c221cf 100644 --- a/SwiftIO/SocketPacket.swift +++ b/SwiftIO/SocketPacket.swift @@ -43,7 +43,7 @@ enum SocketPacketType: Int { } class SocketPacket { - var binary = [NSData]() + var binary = ContiguousArray() var currentPlace = 0 var data:[AnyObject]? var id:Int? diff --git a/SwiftIO/SocketParser.swift b/SwiftIO/SocketParser.swift index d77fab5..45e96a9 100644 --- a/SwiftIO/SocketParser.swift +++ b/SwiftIO/SocketParser.swift @@ -27,8 +27,8 @@ private let shredder = SocketParser.Deconstructor() class SocketParser { // Translation of socket.io-parser#deconstructPacket private class Deconstructor { - var buf = [NSData]() - + var buf = ContiguousArray() + func ripAndTear(data:AnyObject) -> AnyObject { if let bin = data as? NSData { let placeholder = ["_placeholder" :true, "num": buf.count] @@ -36,9 +36,7 @@ class SocketParser { buf.append(bin) return placeholder - } - - if var arr = data as? [AnyObject] { + } else if var arr = data as? [AnyObject] { for i in 0.. Date: Sun, 22 Mar 2015 11:02:31 -0400 Subject: [PATCH 4/7] fix race condition --- SwiftIO/SocketEngineClient.swift | 3 +-- SwiftIO/SocketIOClient.swift | 4 +--- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/SwiftIO/SocketEngineClient.swift b/SwiftIO/SocketEngineClient.swift index 8e984c7..81ac7ee 100644 --- a/SwiftIO/SocketEngineClient.swift +++ b/SwiftIO/SocketEngineClient.swift @@ -26,7 +26,6 @@ import Foundation @objc public protocol SocketEngineClient { - var ackQueue:dispatch_queue_attr_t! {get} var handleQueue:dispatch_queue_attr_t! {get} var emitQueue:dispatch_queue_attr_t! {get} var reconnecting:Bool {get} @@ -38,4 +37,4 @@ import Foundation func pollingDidFail(err:NSError) func webSocketDidCloseWithCode(code:Int, reason:String, wasClean:Bool) func webSocketDidFailWithError(error:NSError) -} +} \ No newline at end of file diff --git a/SwiftIO/SocketIOClient.swift b/SwiftIO/SocketIOClient.swift index 662363c..0f13a3c 100644 --- a/SwiftIO/SocketIOClient.swift +++ b/SwiftIO/SocketIOClient.swift @@ -45,8 +45,6 @@ public class SocketIOClient: NSObject, SocketEngineClient { var waitingData = ContiguousArray() public let socketURL:String - public let ackQueue = dispatch_queue_create("ackQueue".cStringUsingEncoding(NSUTF8StringEncoding), - DISPATCH_QUEUE_SERIAL) public let handleQueue = dispatch_queue_create("handleQueue".cStringUsingEncoding(NSUTF8StringEncoding), DISPATCH_QUEUE_SERIAL) public let emitQueue = dispatch_queue_create("emitQueue".cStringUsingEncoding(NSUTF8StringEncoding), @@ -263,7 +261,7 @@ public class SocketIOClient: NSObject, SocketEngineClient { // If the server wants to know that the client received data func emitAck(ack:Int, withData args:[AnyObject]?) { - dispatch_async(self.ackQueue) {[weak self] in + dispatch_async(self.emitQueue) {[weak self] in if self == nil || !self!.connected || args == nil { return } From 8fa8944672eabe492cb15846f7281a87099bbff4 Mon Sep 17 00:00:00 2001 From: Erik Date: Sun, 22 Mar 2015 11:05:56 -0400 Subject: [PATCH 5/7] fix for no args acks --- SwiftIO/SocketIOClient.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SwiftIO/SocketIOClient.swift b/SwiftIO/SocketIOClient.swift index 0f13a3c..107131d 100644 --- a/SwiftIO/SocketIOClient.swift +++ b/SwiftIO/SocketIOClient.swift @@ -260,9 +260,9 @@ public class SocketIOClient: NSObject, SocketEngineClient { } // If the server wants to know that the client received data - func emitAck(ack:Int, withData args:[AnyObject]?) { + func emitAck(ack:Int, withData args:[AnyObject]) { dispatch_async(self.emitQueue) {[weak self] in - if self == nil || !self!.connected || args == nil { + if self == nil || !self!.connected { return } From 5533545adb2ad78f100a50b71fa40bd87fd71480 Mon Sep 17 00:00:00 2001 From: Erik Date: Sun, 22 Mar 2015 13:19:53 -0400 Subject: [PATCH 6/7] performance --- SwiftIO/SocketParser.swift | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/SwiftIO/SocketParser.swift b/SwiftIO/SocketParser.swift index 45e96a9..2534b3f 100644 --- a/SwiftIO/SocketParser.swift +++ b/SwiftIO/SocketParser.swift @@ -22,29 +22,33 @@ import Foundation -private let shredder = SocketParser.Deconstructor() +private let shredder = SocketParser.PacketShredder() class SocketParser { // Translation of socket.io-parser#deconstructPacket - private class Deconstructor { + private class PacketShredder { var buf = ContiguousArray() - - func ripAndTear(data:AnyObject) -> AnyObject { + + func shred(data:AnyObject) -> AnyObject { if let bin = data as? NSData { let placeholder = ["_placeholder" :true, "num": buf.count] buf.append(bin) return placeholder - } else if var arr = data as? [AnyObject] { + } else if let arr = data as? NSArray { + var newArr = NSMutableArray(array: arr) + for i in 0.. Date: Sun, 22 Mar 2015 14:41:15 -0400 Subject: [PATCH 7/7] bump version --- Socket.IO-Client-Swift.podspec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Socket.IO-Client-Swift.podspec b/Socket.IO-Client-Swift.podspec index 76aeb47..6924c40 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.3.2" + s.version = "1.3.3" 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.3.2' } + s.source = { :git => "https://github.com/socketio/socket.io-client-swift.git", :tag => 'v1.3.3' } s.source_files = "SwiftIO/**/*.swift" s.requires_arc = true # s.dependency 'Starscream', '~> 0.9' # currently this repo includes Starscream swift files