refactor socketpacket
This commit is contained in:
parent
aa43107ad6
commit
4c9d6ef3de
@ -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 {
|
||||
|
||||
@ -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<SocketEventHandler>()
|
||||
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)
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user