diff --git a/SocketIOClientSwift/SocketIOClient.swift b/SocketIOClientSwift/SocketIOClient.swift index 662d8df..9779f95 100644 --- a/SocketIOClientSwift/SocketIOClient.swift +++ b/SocketIOClientSwift/SocketIOClient.swift @@ -328,7 +328,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient func emitAck(ack:Int, withData args:[AnyObject]) { dispatch_async(emitQueue) {[weak self] in if let this = self where this.connected { - let packet = SocketPacket.packetFromEmitWithData(args, id: ack ?? -1, nsp: this.nsp) + let packet = SocketPacket.packetFromEmitAckWithData(args, id: ack ?? -1, nsp: this.nsp) let str = packet.createAck() SocketLogger.log("Emitting Ack: %@", client: this, args: str) diff --git a/SocketIOClientSwift/SocketPacket.swift b/SocketIOClientSwift/SocketPacket.swift index 5bb541f..cde88bb 100644 --- a/SocketIOClientSwift/SocketPacket.swift +++ b/SocketIOClientSwift/SocketPacket.swift @@ -74,35 +74,19 @@ struct SocketPacket { } static func packetFromEmitWithData(data:[AnyObject], id:Int, nsp:String) -> SocketPacket { - func findType(num:Int) -> SocketPacket.PacketType { - switch num { - case 0: - return SocketPacket.PacketType.EVENT - default: - return SocketPacket.PacketType.BINARY_EVENT - } - } - let (parsedData, binary) = deconstructData(data) - let packet = SocketPacket(type: findType(binary.count), data: parsedData, + let packet = SocketPacket(type: findType(binary.count, ack: false), data: parsedData, id: id, nsp: nsp, placeholders: -1, binary: binary) return packet } - func getEvent() -> String { - return data[0] as! String - } - - func getArgs() -> [AnyObject]? { - var arr = data + static func packetFromEmitAckWithData(data:[AnyObject], id:Int, nsp:String) -> SocketPacket { + let (parsedData, binary) = deconstructData(data) + let packet = SocketPacket(type: findType(binary.count, ack: true), data: parsedData, + id: id, nsp: nsp, placeholders: -1, binary: binary) - if data.count == 0 { - return nil - } else { - arr.removeAtIndex(0) - return arr - } + return packet } mutating func addData(data:NSData) -> Bool { @@ -162,7 +146,7 @@ struct SocketPacket { func createAck() -> String { var msg:String - if binary.count == 0 { + if type == PacketType.ACK { if nsp == "/" { msg = "3\(id)[" } else { @@ -183,7 +167,7 @@ struct SocketPacket { func createMessageForEvent(event:String) -> String { let message:String - if binary.count == 0 { + if type == PacketType.EVENT { if nsp == "/" { if id == -1 { message = "2[\"\(event)\"" @@ -257,7 +241,36 @@ struct SocketPacket { return data } } - + + private static func findType(binCount:Int, ack:Bool) -> PacketType { + switch binCount { + case 0 where !ack: + return PacketType.EVENT + case 0 where ack: + return PacketType.ACK + case _ where !ack: + return PacketType.BINARY_EVENT + case _ where ack: + return PacketType.BINARY_ACK + default: + return PacketType.BINARY_ACK + } + } + + func getEvent() -> String { + return data[0] as! String + } + + func getArgs() -> [AnyObject]? { + var arr = data + + if data.count == 0 { + return nil + } else { + arr.removeAtIndex(0) + return arr + } + } private static func shred(data:AnyObject, inout binary:[NSData]) -> AnyObject { if let bin = data as? NSData {