From 4c9d6ef3def1b7fc6c8ec99d51105c1afe4e5325 Mon Sep 17 00:00:00 2001 From: Erik Date: Mon, 17 Aug 2015 14:47:14 -0400 Subject: [PATCH] refactor socketpacket --- SocketIOClientSwift/SocketEventHandler.swift | 4 +- SocketIOClientSwift/SocketIOClient.swift | 34 ++++++------- SocketIOClientSwift/SocketPacket.swift | 52 +++++++++++--------- 3 files changed, 48 insertions(+), 42 deletions(-) diff --git a/SocketIOClientSwift/SocketEventHandler.swift b/SocketIOClientSwift/SocketEventHandler.swift index 307d6b6..05efb10 100644 --- a/SocketIOClientSwift/SocketEventHandler.swift +++ b/SocketIOClientSwift/SocketEventHandler.swift @@ -26,12 +26,12 @@ import Foundation private func emitAckCallback(socket: SocketIOClient?, num: Int?) (items: AnyObject...) -> Void { - socket?.emitAck(num ?? -1, withData: items) + socket?.emitAck(num ?? -1, withItems: items) } private func emitAckCallbackObjectiveC(socket: SocketIOClient?, num: Int?) (items: NSArray) -> Void { - socket?.emitAck(num ?? -1, withData: items as [AnyObject]) + socket?.emitAck(num ?? -1, withItems: items as [AnyObject]) } struct SocketEventHandler { diff --git a/SocketIOClientSwift/SocketIOClient.swift b/SocketIOClientSwift/SocketIOClient.swift index 4c3d15e..8c53b8f 100644 --- a/SocketIOClientSwift/SocketIOClient.swift +++ b/SocketIOClientSwift/SocketIOClient.swift @@ -25,7 +25,7 @@ import Foundation public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient { - private var anyHandler:((SocketAnyEvent) -> Void)? + private var anyHandler: ((SocketAnyEvent) -> Void)? private var currentReconnectAttempt = 0 private var handlers = ContiguousArray() private var connectParams: [String: AnyObject]? @@ -38,19 +38,19 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient var log = false var waitingData = [SocketPacket]() - public let socketURL: String - public let handleQueue: dispatch_queue_t! public let emitQueue = dispatch_queue_create("emitQueue", DISPATCH_QUEUE_SERIAL) + public let handleQueue: dispatch_queue_t! + public let socketURL: String + public private(set) var engine: SocketEngine? public private(set) var secure = false public private(set) var status = SocketIOClientStatus.NotConnected - - public var engine:SocketEngine? + public var nsp = "/" public var opts: [String: AnyObject]? public var reconnects = true public var reconnectWait = 10 - public var sid:String? { + public var sid: String? { return engine?.sid } @@ -171,13 +171,13 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient } } - private func createOnAck(event: String, items: [AnyObject]) -> OnAckCallback { + private func createOnAck(items: [AnyObject]) -> OnAckCallback { return {[weak self, ack = ++currentAck] timeout, callback in if let this = self { this.ackHandlers.addAck(ack, callback: callback) dispatch_async(this.emitQueue) {[weak this] in - this?._emit(event, items, ack: ack) + this?._emit(items, ack: ack) } if timeout != 0 { @@ -249,7 +249,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient } dispatch_async(emitQueue) {[weak self] in - self?._emit(event, items) + self?._emit([event] + items) } } @@ -258,23 +258,23 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient an ack. */ public func emitWithAck(event: String, _ items: AnyObject...) -> OnAckCallback { - return createOnAck(event, items: items) + return emitWithAck(event, withItems: items) } /** Same as emitWithAck, but for Objective-C */ public func emitWithAck(event: String, withItems items: [AnyObject]) -> OnAckCallback { - return createOnAck(event, items: items) + return createOnAck([event] + items) } - private func _emit(event: String, _ args: [AnyObject], ack: Int? = nil) { + private func _emit(data: [AnyObject], ack: Int? = nil) { guard status == SocketIOClientStatus.Connected else { return } - let packet = SocketPacket.packetFromEmitWithData(args, id: ack ?? -1, nsp: nsp) - let str = packet.createMessageForEvent(event) + let packet = SocketPacket.packetFromEmit(data, id: ack ?? -1, nsp: nsp, ack: false) + let str = packet.packetString SocketLogger.log("Emitting: %@", client: self, args: str) @@ -286,11 +286,11 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient } // If the server wants to know that the client received data - func emitAck(ack: Int, withData args: [AnyObject]) { + func emitAck(ack: Int, withItems items: [AnyObject]) { dispatch_async(emitQueue) {[weak self] in if let this = self where this.status == SocketIOClientStatus.Connected { - let packet = SocketPacket.packetFromEmitAckWithData(args, id: ack ?? -1, nsp: this.nsp) - let str = packet.createAck() + let packet = SocketPacket.packetFromEmit(items, id: ack ?? -1, nsp: this.nsp, ack: true) + let str = packet.packetString SocketLogger.log("Emitting Ack: %@", client: this, args: str) diff --git a/SocketIOClientSwift/SocketPacket.swift b/SocketIOClientSwift/SocketPacket.swift index 6d57787..221acff 100644 --- a/SocketIOClientSwift/SocketPacket.swift +++ b/SocketIOClientSwift/SocketPacket.swift @@ -57,6 +57,10 @@ struct SocketPacket { return better } + var packetString: String { + return createPacketString() + } + init(type: SocketPacket.PacketType, data: [AnyObject] = [AnyObject](), id: Int = -1, nsp: String, placeholders: Int = 0, binary: [NSData] = [NSData]()) { self.data = data @@ -86,8 +90,6 @@ struct SocketPacket { private func completeMessage(var message: String, ack: Bool) -> String { if data.count == 0 { return message + "]" - } else if !ack { - message += "," } for arg in data { @@ -120,7 +122,7 @@ struct SocketPacket { return message + "]" } - func createAck() -> String { + private func createAck() -> String { let msg: String if type == PacketType.Ack { @@ -141,35 +143,35 @@ struct SocketPacket { } - func createMessageForEvent(event: String) -> String { + private func createMessageForEvent() -> String { let message: String if type == PacketType.Event { if nsp == "/" { if id == -1 { - message = "2[\"\(event)\"" + message = "2[" } else { - message = "2\(id)[\"\(event)\"" + message = "2\(id)[" } } else { if id == -1 { - message = "2\(nsp),[\"\(event)\"" + message = "2\(nsp),[" } else { - message = "2\(nsp),\(id)[\"\(event)\"" + message = "2\(nsp),\(id)[" } } } else { if nsp == "/" { if id == -1 { - message = "5\(binary.count)-[\"\(event)\"" + message = "5\(binary.count)-[" } else { - message = "5\(binary.count)-\(id)[\"\(event)\"" + message = "5\(binary.count)-\(id)[" } } else { if id == -1 { - message = "5\(binary.count)-\(nsp),[\"\(event)\"" + message = "5\(binary.count)-\(nsp),[" } else { - message = "5\(binary.count)-\(nsp),\(id)[\"\(event)\"" + message = "5\(binary.count)-\(nsp),\(id)[" } } } @@ -177,6 +179,18 @@ struct SocketPacket { return completeMessage(message, ack: false) } + private func createPacketString() -> String { + let str: String + + if type == PacketType.Event || type == PacketType.BinaryEvent { + str = createMessageForEvent() + } else { + str = createAck() + } + + return str + } + mutating func fillInPlaceholders() { let newArr = NSMutableArray(array: data) @@ -255,17 +269,9 @@ extension SocketPacket { } } - static func packetFromEmitWithData(data: [AnyObject], id: Int, nsp: String) -> SocketPacket { - let (parsedData, binary) = deconstructData(data) - let packet = SocketPacket(type: findType(binary.count, ack: false), data: parsedData, - id: id, nsp: nsp, placeholders: -1, binary: binary) - - return packet - } - - 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, + static func packetFromEmit(items: [AnyObject], id: Int, nsp: String, ack: Bool) -> SocketPacket { + let (parsedData, binary) = deconstructData(items) + let packet = SocketPacket(type: findType(binary.count, ack: ack), data: parsedData, id: id, nsp: nsp, placeholders: -1, binary: binary) return packet