refactor socketpacket
This commit is contained in:
parent
aa43107ad6
commit
4c9d6ef3de
@ -26,12 +26,12 @@ import Foundation
|
|||||||
|
|
||||||
private func emitAckCallback(socket: SocketIOClient?, num: Int?)
|
private func emitAckCallback(socket: SocketIOClient?, num: Int?)
|
||||||
(items: AnyObject...) -> Void {
|
(items: AnyObject...) -> Void {
|
||||||
socket?.emitAck(num ?? -1, withData: items)
|
socket?.emitAck(num ?? -1, withItems: items)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func emitAckCallbackObjectiveC(socket: SocketIOClient?, num: Int?)
|
private func emitAckCallbackObjectiveC(socket: SocketIOClient?, num: Int?)
|
||||||
(items: NSArray) -> Void {
|
(items: NSArray) -> Void {
|
||||||
socket?.emitAck(num ?? -1, withData: items as [AnyObject])
|
socket?.emitAck(num ?? -1, withItems: items as [AnyObject])
|
||||||
}
|
}
|
||||||
|
|
||||||
struct SocketEventHandler {
|
struct SocketEventHandler {
|
||||||
|
|||||||
@ -25,7 +25,7 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient {
|
public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient {
|
||||||
private var anyHandler:((SocketAnyEvent) -> Void)?
|
private var anyHandler: ((SocketAnyEvent) -> Void)?
|
||||||
private var currentReconnectAttempt = 0
|
private var currentReconnectAttempt = 0
|
||||||
private var handlers = ContiguousArray<SocketEventHandler>()
|
private var handlers = ContiguousArray<SocketEventHandler>()
|
||||||
private var connectParams: [String: AnyObject]?
|
private var connectParams: [String: AnyObject]?
|
||||||
@ -38,19 +38,19 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient
|
|||||||
var log = false
|
var log = false
|
||||||
var waitingData = [SocketPacket]()
|
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 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 secure = false
|
||||||
public private(set) var status = SocketIOClientStatus.NotConnected
|
public private(set) var status = SocketIOClientStatus.NotConnected
|
||||||
|
|
||||||
public var engine:SocketEngine?
|
|
||||||
public var nsp = "/"
|
public var nsp = "/"
|
||||||
public var opts: [String: AnyObject]?
|
public var opts: [String: AnyObject]?
|
||||||
public var reconnects = true
|
public var reconnects = true
|
||||||
public var reconnectWait = 10
|
public var reconnectWait = 10
|
||||||
public var sid:String? {
|
public var sid: String? {
|
||||||
return engine?.sid
|
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
|
return {[weak self, ack = ++currentAck] timeout, callback in
|
||||||
if let this = self {
|
if let this = self {
|
||||||
this.ackHandlers.addAck(ack, callback: callback)
|
this.ackHandlers.addAck(ack, callback: callback)
|
||||||
|
|
||||||
dispatch_async(this.emitQueue) {[weak this] in
|
dispatch_async(this.emitQueue) {[weak this] in
|
||||||
this?._emit(event, items, ack: ack)
|
this?._emit(items, ack: ack)
|
||||||
}
|
}
|
||||||
|
|
||||||
if timeout != 0 {
|
if timeout != 0 {
|
||||||
@ -249,7 +249,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient
|
|||||||
}
|
}
|
||||||
|
|
||||||
dispatch_async(emitQueue) {[weak self] in
|
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.
|
an ack.
|
||||||
*/
|
*/
|
||||||
public func emitWithAck(event: String, _ items: AnyObject...) -> OnAckCallback {
|
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
|
Same as emitWithAck, but for Objective-C
|
||||||
*/
|
*/
|
||||||
public func emitWithAck(event: String, withItems items: [AnyObject]) -> OnAckCallback {
|
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 {
|
guard status == SocketIOClientStatus.Connected else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
let packet = SocketPacket.packetFromEmitWithData(args, id: ack ?? -1, nsp: nsp)
|
let packet = SocketPacket.packetFromEmit(data, id: ack ?? -1, nsp: nsp, ack: false)
|
||||||
let str = packet.createMessageForEvent(event)
|
let str = packet.packetString
|
||||||
|
|
||||||
SocketLogger.log("Emitting: %@", client: self, args: str)
|
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
|
// 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
|
dispatch_async(emitQueue) {[weak self] in
|
||||||
if let this = self where this.status == SocketIOClientStatus.Connected {
|
if let this = self where this.status == SocketIOClientStatus.Connected {
|
||||||
let packet = SocketPacket.packetFromEmitAckWithData(args, id: ack ?? -1, nsp: this.nsp)
|
let packet = SocketPacket.packetFromEmit(items, id: ack ?? -1, nsp: this.nsp, ack: true)
|
||||||
let str = packet.createAck()
|
let str = packet.packetString
|
||||||
|
|
||||||
SocketLogger.log("Emitting Ack: %@", client: this, args: str)
|
SocketLogger.log("Emitting Ack: %@", client: this, args: str)
|
||||||
|
|
||||||
|
|||||||
@ -57,6 +57,10 @@ struct SocketPacket {
|
|||||||
return better
|
return better
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var packetString: String {
|
||||||
|
return createPacketString()
|
||||||
|
}
|
||||||
|
|
||||||
init(type: SocketPacket.PacketType, data: [AnyObject] = [AnyObject](), id: Int = -1,
|
init(type: SocketPacket.PacketType, data: [AnyObject] = [AnyObject](), id: Int = -1,
|
||||||
nsp: String, placeholders: Int = 0, binary: [NSData] = [NSData]()) {
|
nsp: String, placeholders: Int = 0, binary: [NSData] = [NSData]()) {
|
||||||
self.data = data
|
self.data = data
|
||||||
@ -86,8 +90,6 @@ struct SocketPacket {
|
|||||||
private func completeMessage(var message: String, ack: Bool) -> String {
|
private func completeMessage(var message: String, ack: Bool) -> String {
|
||||||
if data.count == 0 {
|
if data.count == 0 {
|
||||||
return message + "]"
|
return message + "]"
|
||||||
} else if !ack {
|
|
||||||
message += ","
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for arg in data {
|
for arg in data {
|
||||||
@ -120,7 +122,7 @@ struct SocketPacket {
|
|||||||
return message + "]"
|
return message + "]"
|
||||||
}
|
}
|
||||||
|
|
||||||
func createAck() -> String {
|
private func createAck() -> String {
|
||||||
let msg: String
|
let msg: String
|
||||||
|
|
||||||
if type == PacketType.Ack {
|
if type == PacketType.Ack {
|
||||||
@ -141,35 +143,35 @@ struct SocketPacket {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func createMessageForEvent(event: String) -> String {
|
private func createMessageForEvent() -> String {
|
||||||
let message: String
|
let message: String
|
||||||
|
|
||||||
if type == PacketType.Event {
|
if type == PacketType.Event {
|
||||||
if nsp == "/" {
|
if nsp == "/" {
|
||||||
if id == -1 {
|
if id == -1 {
|
||||||
message = "2[\"\(event)\""
|
message = "2["
|
||||||
} else {
|
} else {
|
||||||
message = "2\(id)[\"\(event)\""
|
message = "2\(id)["
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if id == -1 {
|
if id == -1 {
|
||||||
message = "2\(nsp),[\"\(event)\""
|
message = "2\(nsp),["
|
||||||
} else {
|
} else {
|
||||||
message = "2\(nsp),\(id)[\"\(event)\""
|
message = "2\(nsp),\(id)["
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if nsp == "/" {
|
if nsp == "/" {
|
||||||
if id == -1 {
|
if id == -1 {
|
||||||
message = "5\(binary.count)-[\"\(event)\""
|
message = "5\(binary.count)-["
|
||||||
} else {
|
} else {
|
||||||
message = "5\(binary.count)-\(id)[\"\(event)\""
|
message = "5\(binary.count)-\(id)["
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if id == -1 {
|
if id == -1 {
|
||||||
message = "5\(binary.count)-\(nsp),[\"\(event)\""
|
message = "5\(binary.count)-\(nsp),["
|
||||||
} else {
|
} 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)
|
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() {
|
mutating func fillInPlaceholders() {
|
||||||
let newArr = NSMutableArray(array: data)
|
let newArr = NSMutableArray(array: data)
|
||||||
|
|
||||||
@ -255,17 +269,9 @@ extension SocketPacket {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static func packetFromEmitWithData(data: [AnyObject], id: Int, nsp: String) -> SocketPacket {
|
static func packetFromEmit(items: [AnyObject], id: Int, nsp: String, ack: Bool) -> SocketPacket {
|
||||||
let (parsedData, binary) = deconstructData(data)
|
let (parsedData, binary) = deconstructData(items)
|
||||||
let packet = SocketPacket(type: findType(binary.count, ack: false), data: parsedData,
|
let packet = SocketPacket(type: findType(binary.count, ack: ack), 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,
|
|
||||||
id: id, nsp: nsp, placeholders: -1, binary: binary)
|
id: id, nsp: nsp, placeholders: -1, binary: binary)
|
||||||
|
|
||||||
return packet
|
return packet
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user