Skip to content

Commit 8b893ad

Browse files
committed
refactor
1 parent 6985efd commit 8b893ad

File tree

5 files changed

+129
-243
lines changed

5 files changed

+129
-243
lines changed

SwiftIO/SocketEngine.swift

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -476,9 +476,7 @@ public class SocketEngine: NSObject, WebSocketDelegate {
476476
}
477477
}
478478

479-
/*
480-
Send a message with type 4
481-
*/
479+
/// Send an engine message (4)
482480
public func send(msg:String, withData datas:[NSData]?) {
483481
if self.probing {
484482
self.probeWait.append((msg, PacketType.MESSAGE, datas))
@@ -565,10 +563,10 @@ public class SocketEngine: NSObject, WebSocketDelegate {
565563
}
566564

567565
if self!.websocket {
568-
// NSLog("writing ws: \(msg):\(datas)")
566+
// NSLog("writing ws: \(msg):\(data)")
569567
self?.sendWebSocketMessage(msg, withType: type, datas: data)
570568
} else {
571-
// NSLog("writing poll: \(msg):\(datas)")
569+
// NSLog("writing poll: \(msg):\(data)")
572570
self?.sendPollMessage(msg, withType: type, datas: data)
573571
}
574572
}

SwiftIO/SocketEventHandler.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ public typealias NormalCallback = (NSArray?, AckEmitter?) -> Void
2828
public typealias AnyHandler = (event:String, items:AnyObject?)
2929
public typealias AckEmitter = (AnyObject...) -> Void
3030

31-
private func emitAckCallback(socket:SocketIOClient, num:Int, type:Int)
31+
private func emitAckCallback(socket:SocketIOClient, num:Int)
3232
// Curried
3333
(items:AnyObject...) -> Void {
34-
socket.emitAck(num, withData: items, withAckType: type)
34+
socket.emitAck(num, withData: items)
3535
}
3636

3737
class SocketEventHandler {
@@ -46,7 +46,7 @@ class SocketEventHandler {
4646
func executeCallback(_ items:NSArray? = nil, withAck ack:Int? = nil, withAckType type:Int? = nil,
4747
withSocket socket:SocketIOClient? = nil) {
4848
dispatch_async(dispatch_get_main_queue()) {[weak self] in
49-
self?.callback?(items, ack != nil ? emitAckCallback(socket!, ack!, type!) : nil)
49+
self?.callback?(items, ack != nil ? emitAckCallback(socket!, ack!) : nil)
5050
return
5151
}
5252
}

SwiftIO/SocketIOClient.swift

Lines changed: 24 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -27,22 +27,22 @@ import Foundation
2727
public class SocketIOClient: NSObject, SocketEngineClient {
2828
let reconnectAttempts:Int!
2929
private lazy var params = [String: AnyObject]()
30-
private var ackHandlers = [SocketAckHandler]()
30+
private var ackHandlers = ContiguousArray<SocketAckHandler>()
3131
private var anyHandler:((AnyHandler) -> Void)?
3232
private var _closed = false
3333
private var _connected = false
3434
private var _connecting = false
3535
private var currentReconnectAttempt = 0
3636
private var forcePolling = false
37-
private var handlers = [SocketEventHandler]()
37+
private var handlers = ContiguousArray<SocketEventHandler>()
3838
private var paramConnect = false
3939
private var _secure = false
4040
private var _sid:String?
4141
private var _reconnecting = false
4242
private var reconnectTimer:NSTimer?
4343

44-
internal var currentAck = -1
45-
internal var waitingData = [SocketPacket]()
44+
var currentAck = -1
45+
var waitingData = ContiguousArray<SocketPacket>()
4646

4747
public let socketURL:String
4848
public let ackQueue = dispatch_queue_create("ackQueue".cStringUsingEncoding(NSUTF8StringEncoding),
@@ -62,7 +62,7 @@ public class SocketIOClient: NSObject, SocketEngineClient {
6262
}
6363
public var cookies:[NSHTTPCookie]?
6464
public var engine:SocketEngine?
65-
public var nsp:String?
65+
public var nsp = "/"
6666
public var reconnects = true
6767
public var reconnecting:Bool {
6868
return self._reconnecting
@@ -244,69 +244,40 @@ public class SocketIOClient: NSObject, SocketEngineClient {
244244
}
245245

246246
private func _emit(event:String, _ args:[AnyObject], ack:Int? = nil) {
247-
var frame:SocketPacket
248-
var str:String
249-
250-
let (items, hasBinary, emitDatas) = SocketParser.parseEmitArgs(args)
251-
252247
if !self.connected {
253248
return
254249
}
255250

256-
if hasBinary {
257-
if ack == nil {
258-
str = SocketPacket.createMessageForEvent(event, withArgs: items,
259-
hasBinary: true, withDatas: emitDatas.count, toNamespace: self.nsp)
260-
} else {
261-
str = SocketPacket.createMessageForEvent(event, withArgs: items,
262-
hasBinary: true, withDatas: emitDatas.count, toNamespace: self.nsp, wantsAck: ack)
263-
}
264-
265-
self.engine?.send(str, withData: emitDatas)
251+
let packet = SocketPacket(type: nil, data: args, nsp: self.nsp, id: ack)
252+
var str:String
253+
254+
SocketParser.parseForEmit(packet)
255+
str = packet.createMessageForEvent(event)
256+
257+
if packet.type == SocketPacketType.BINARY_EVENT {
258+
self.engine?.send(str, withData: packet.binary)
266259
} else {
267-
if ack == nil {
268-
str = SocketPacket.createMessageForEvent(event, withArgs: items, hasBinary: false,
269-
withDatas: 0, toNamespace: self.nsp)
270-
} else {
271-
str = SocketPacket.createMessageForEvent(event, withArgs: items, hasBinary: false,
272-
withDatas: 0, toNamespace: self.nsp, wantsAck: ack)
273-
}
274-
275260
self.engine?.send(str, withData: nil)
276261
}
277262
}
278263

279264
// If the server wants to know that the client received data
280-
func emitAck(ack:Int, withData data:[AnyObject]?, withAckType ackType:Int) {
265+
func emitAck(ack:Int, withData args:[AnyObject]?) {
281266
dispatch_async(self.ackQueue) {[weak self] in
282-
if self == nil || !self!.connected || data == nil {
267+
if self == nil || !self!.connected || args == nil {
283268
return
284269
}
285270

286-
// println("sending ack: \(ack) \(data)")
287-
let (items, hasBinary, emitDatas) = SocketParser.parseEmitArgs(data!)
271+
let packet = SocketPacket(type: nil, data: args, nsp: self!.nsp, id: ack)
288272
var str:String
289273

290-
if !hasBinary {
291-
if self?.nsp == nil {
292-
str = SocketPacket.createAck(ack, withArgs: items,
293-
withAckType: 3, withNsp: "/")
294-
} else {
295-
str = SocketPacket.createAck(ack, withArgs: items,
296-
withAckType: 3, withNsp: self!.nsp!)
297-
}
298-
299-
self?.engine?.send(str, withData: nil)
274+
SocketParser.parseForEmit(packet)
275+
str = packet.createAck()
276+
277+
if packet.type == SocketPacketType.BINARY_ACK {
278+
self?.engine?.send(str, withData: packet.binary)
300279
} else {
301-
if self?.nsp == nil {
302-
str = SocketPacket.createAck(ack, withArgs: items,
303-
withAckType: 6, withNsp: "/", withBinary: emitDatas.count)
304-
} else {
305-
str = SocketPacket.createAck(ack, withArgs: items,
306-
withAckType: 6, withNsp: self!.nsp!, withBinary: emitDatas.count)
307-
}
308-
309-
self?.engine?.send(str, withData: emitDatas)
280+
self?.engine?.send(str, withData: nil)
310281
}
311282
}
312283
}
@@ -361,8 +332,8 @@ public class SocketIOClient: NSObject, SocketEngineClient {
361332

362333
// Should be removed and moved to SocketEngine
363334
func joinNamespace() {
364-
if self.nsp != nil {
365-
self.engine?.send("0/\(self.nsp!)", withData: nil)
335+
if self.nsp != "/" {
336+
self.engine?.send("0/\(self.nsp)", withData: nil)
366337
}
367338
}
368339

SwiftIO/SocketPacket.swift

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,16 @@ enum SocketPacketType: Int {
4343
}
4444

4545
class SocketPacket {
46-
let type:SocketPacketType
4746
var binary = [NSData]()
4847
var currentPlace = 0
4948
var data:[AnyObject]?
5049
var id:Int?
5150
var justAck = false
5251
var nsp = ""
5352
var placeholders:Int?
53+
var type:SocketPacketType?
5454

55-
init(type:SocketPacketType, data:[AnyObject]? = nil, nsp:String = "",
55+
init(type:SocketPacketType?, data:[AnyObject]? = nil, nsp:String = "",
5656
placeholders:Int? = nil, id:Int? = nil) {
5757
self.type = type
5858
self.data = data
@@ -62,10 +62,9 @@ class SocketPacket {
6262
}
6363

6464
/// Only call if you know data is not nil
65-
func createBinaryPlaceHolders() {
66-
var strData = "\(self.data!)"
67-
println(strData)
68-
}
65+
// func createBinaryPlaceHolders() {
66+
// var strData = "\(self.data!)"
67+
// }
6968

7069
func getEvent() -> String {
7170
return data?.removeAtIndex(0) as String
@@ -95,76 +94,77 @@ class SocketPacket {
9594
}
9695
}
9796

98-
class func createMessageForEvent(event:String, withArgs args:[AnyObject],
99-
hasBinary:Bool, withDatas datas:Int = 0, toNamespace nsp:String?, wantsAck ack:Int? = nil) -> String {
100-
97+
func createMessageForEvent(event:String) -> String {
10198
var message:String
10299
var jsonSendError:NSError?
103100

104-
if !hasBinary {
105-
if nsp == nil {
106-
if ack == nil {
101+
if self.binary.count == 0 {
102+
self.type = SocketPacketType.EVENT
103+
104+
if self.nsp == "/" {
105+
if self.id == nil {
107106
message = "2[\"\(event)\""
108107
} else {
109-
message = "2\(ack!)[\"\(event)\""
108+
message = "2\(self.id!)[\"\(event)\""
110109
}
111110
} else {
112-
if ack == nil {
113-
message = "2/\(nsp!),[\"\(event)\""
111+
if self.id == nil {
112+
message = "2/\(self.nsp),[\"\(event)\""
114113
} else {
115-
message = "2/\(nsp!),\(ack!)[\"\(event)\""
114+
message = "2/\(self.nsp),\(self.id!)[\"\(event)\""
116115
}
117116
}
118117
} else {
119-
if nsp == nil {
120-
if ack == nil {
121-
message = "5\(datas)-[\"\(event)\""
118+
self.type = SocketPacketType.BINARY_EVENT
119+
120+
if self.nsp == "/" {
121+
if self.id == nil {
122+
message = "5\(self.binary.count)-[\"\(event)\""
122123
} else {
123-
message = "5\(datas)-\(ack!)[\"\(event)\""
124+
message = "5\(self.binary.count)-\(self.id!)[\"\(event)\""
124125
}
125126
} else {
126-
if ack == nil {
127-
message = "5\(datas)-/\(nsp!),[\"\(event)\""
127+
if self.id == nil {
128+
message = "5\(self.binary.count)-/\(self.nsp),[\"\(event)\""
128129
} else {
129-
message = "5\(datas)-/\(nsp!),\(ack!)[\"\(event)\""
130+
message = "5\(self.binary.count)-/\(self.nsp),\(self.id!)[\"\(event)\""
130131
}
131132
}
132133
}
133134

134-
return self.completeMessage(message, args: args)
135+
return self.completeMessage(message)
135136
}
136137

137-
class func createAck(ack:Int, withArgs args:[AnyObject], withAckType ackType:Int,
138-
withNsp nsp:String, withBinary binary:Int = 0) -> String {
138+
func createAck() -> String {
139139
var msg:String
140140

141-
if ackType == 3 {
141+
if self.binary.count == 0 {
142142
if nsp == "/" {
143-
msg = "3\(ack)["
143+
msg = "3\(self.id!)["
144144
} else {
145-
msg = "3/\(nsp),\(ack)["
145+
msg = "3/\(self.nsp),\(self.id!)["
146146
}
147147
} else {
148148
if nsp == "/" {
149-
msg = "6\(binary)-\(ack)["
149+
msg = "6\(self.binary.count)-\(self.id!)["
150150
} else {
151-
msg = "6\(binary)-/\(nsp),\(ack)["
151+
msg = "6\(self.binary.count)-/\(self.nsp),\(self.id!)["
152152
}
153153
}
154154

155-
return self.completeMessage(msg, args: args, ack: true)
155+
return self.completeMessage(msg, ack: true)
156156
}
157157

158-
private class func completeMessage(var message:String, args:[AnyObject], ack:Bool = false) -> String {
158+
func completeMessage(var message:String, ack:Bool = false) -> String {
159159
var err:NSError?
160160

161-
if args.count == 0 {
161+
if self.data == nil || self.data!.count == 0 {
162162
return message + "]"
163163
} else if !ack {
164164
message += ","
165165
}
166166

167-
for arg in args {
167+
for arg in self.data! {
168168

169169
if arg is NSDictionary || arg is [AnyObject] {
170170
let jsonSend = NSJSONSerialization.dataWithJSONObject(arg,

0 commit comments

Comments
 (0)