Skip to content

Commit 69339cb

Browse files
committed
work on logging
1 parent 7f7ae0b commit 69339cb

File tree

6 files changed

+118
-24
lines changed

6 files changed

+118
-24
lines changed

SocketIOClientSwift/SocketEngine.swift

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ extension String {
3030
}
3131
}
3232

33-
public final class SocketEngine: NSObject, WebSocketDelegate {
33+
public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient {
3434
private typealias Probe = (msg:String, type:PacketType, data:ContiguousArray<NSData>?)
3535
private typealias ProbeWaitQueue = [Probe]
3636

@@ -62,6 +62,7 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
6262

6363
weak var client:SocketEngineClient?
6464
var cookies:[NSHTTPCookie]?
65+
var log = false
6566
var pingInterval:Int?
6667
var polling:Bool {
6768
return self._polling
@@ -93,11 +94,12 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
9394
}
9495

9596
public init(client:SocketEngineClient, forcePolling:Bool,
96-
forceWebsockets:Bool, withCookies cookies:[NSHTTPCookie]?) {
97+
forceWebsockets:Bool, withCookies cookies:[NSHTTPCookie]?, logging:Bool) {
9798
self.client = client
9899
self.forcePolling = forcePolling
99100
self.forceWebsockets = forceWebsockets
100101
self.cookies = cookies
102+
self.log = logging
101103
self.session = NSURLSession(configuration: NSURLSessionConfiguration.ephemeralSessionConfiguration(),
102104
delegate: nil, delegateQueue: self.workQueue)
103105
}
@@ -181,8 +183,8 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
181183

182184
private func doFastUpgrade() {
183185
if self.waitingForPoll {
184-
NSLog("Outstanding poll when switched to websockets," +
185-
"we'll probably disconnect soon. You should report this.")
186+
SocketLogger.err("Engine: Outstanding poll when switched to WebSockets," +
187+
"we'll probably disconnect soon. You should report this.", client: self)
186188
}
187189

188190
self.sendWebSocketMessage("", withType: PacketType.UPGRADE, datas: nil)
@@ -211,7 +213,8 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
211213

212214
req.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData
213215

214-
// NSLog("Doing request: \(req)")
216+
SocketLogger.log("Engine: Doing polling request: \(req)", client: self)
217+
215218
self.session.dataTaskWithRequest(req) {[weak self] data, res, err in
216219
if self == nil {
217220
return
@@ -225,7 +228,7 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
225228
return
226229
}
227230

228-
// NSLog("Got response: \(res)")
231+
SocketLogger.log("Engine: Got polling response: \(res)", client: self!)
229232

230233
if let str = NSString(data: data, encoding: NSUTF8StringEncoding) as? String {
231234
dispatch_async(self!.parseQueue) {
@@ -245,7 +248,8 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
245248
}
246249

247250
private func flushProbeWait() {
248-
// NSLog("flushing probe wait")
251+
SocketLogger.log("Engine: Flushing probe wait", client: self)
252+
249253
dispatch_async(self.emitQueue) {[weak self] in
250254
if self == nil {
251255
return
@@ -294,8 +298,7 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
294298

295299
self.waitingForPost = true
296300

297-
// NSLog("posting: \(postStr)")
298-
// NSLog("Posting with WS status of: \(self.websocket)")
301+
SocketLogger.log("Engine: POSTing: \(postStr)", client: self)
299302

300303
self.session.dataTaskWithRequest(req) {[weak self] data, res, err in
301304
if self == nil {
@@ -349,6 +352,8 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
349352

350353
public func open(opts:[String: AnyObject]? = nil) {
351354
if self.connected {
355+
SocketLogger.err("Engine: Tried to open while connected", client: self)
356+
352357
self.client?.didError("Engine tried to open while connected")
353358
return
354359
}
@@ -405,7 +410,8 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
405410
length += chr
406411
} else {
407412
if length == "" || testLength(length, &n) {
408-
NSLog("parsing error: \(str)")
413+
SocketLogger.err("Engine: parsing error: \(str)", client: self)
414+
409415
self.handlePollingFailed("Error parsing XHR message")
410416
return
411417
}
@@ -443,7 +449,8 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
443449
}
444450

445451
private func parseEngineMessage(var message:String, fromPolling:Bool) {
446-
// NSLog("Engine got message: \(message)")
452+
SocketLogger.log("Engine: Got message: \(message)", client: self)
453+
447454
if fromPolling {
448455
fixDoubleUTF8(&message)
449456
}
@@ -555,7 +562,8 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
555562
/// Only call on emitQueue
556563
private func sendPollMessage(var msg:String, withType type:PacketType,
557564
datas:ContiguousArray<NSData>? = nil) {
558-
// println("Sending poll: \(msg) as type: \(type.rawValue)")
565+
SocketLogger.log("Engine: Sending poll: \(msg) as type: \(type.rawValue)", client: self)
566+
559567
doubleEncodeUTF8(&msg)
560568
let strMsg = "\(type.rawValue)\(msg)"
561569

@@ -578,7 +586,8 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
578586
/// Only call on emitQueue
579587
private func sendWebSocketMessage(str:String, withType type:PacketType,
580588
datas:ContiguousArray<NSData>? = nil) {
581-
// println("Sending ws: \(str) as type: \(type.rawValue)")
589+
SocketLogger.log("Engine: Sending ws: \(str) as type: \(type.rawValue)", client: self)
590+
582591
self.ws?.writeString("\(type.rawValue)\(str)")
583592

584593
if datas != nil {
@@ -607,7 +616,8 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
607616

608617
private func upgradeTransport() {
609618
if self.websocketConnected {
610-
// NSLog("Doing fast upgrade")
619+
SocketLogger.log("Engine: Upgrading transport to WebSockets", client: self)
620+
611621
// Do a fast upgrade
612622
// At this point, we should not send anymore polling messages-
613623
self.fastUpgrade = true
@@ -622,10 +632,10 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
622632
}
623633

624634
if self!.websocket {
625-
// NSLog("writing ws: \(msg):\(data)")
635+
SocketLogger.log("Engine: Writing ws: \(msg):\(data)", client: self!)
626636
self?.sendWebSocketMessage(msg, withType: type, datas: data)
627637
} else {
628-
// NSLog("writing poll: \(msg):\(data)")
638+
SocketLogger.log("Engine: Writing poll: \(msg):\(data)", client: self!)
629639
self?.sendPollMessage(msg, withType: type, datas: data)
630640
}
631641
}

SocketIOClientSwift/SocketEventHandler.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ private func emitAckCallback(socket:SocketIOClient, num:Int)
3030
socket.emitAck(num, withData: items)
3131
}
3232

33-
class SocketEventHandler {
33+
final class SocketEventHandler {
3434
let event:String!
3535
let callback:NormalCallback?
3636

SocketIOClientSwift/SocketIOClient.swift

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
import Foundation
2626

27-
public final class SocketIOClient: NSObject, SocketEngineClient {
27+
public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient {
2828
private lazy var params = [String: AnyObject]()
2929
private var anyHandler:((SocketAnyEvent) -> Void)?
3030
private var _closed = false
@@ -43,6 +43,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient {
4343
let reconnectAttempts:Int!
4444
var ackHandlers = SocketAckMap()
4545
var currentAck = -1
46+
var log = false
4647
var waitingData = ContiguousArray<SocketPacket>()
4748

4849
public let socketURL:String
@@ -92,12 +93,12 @@ public final class SocketIOClient: NSObject, SocketEngineClient {
9293
self.cookies = cookies
9394
}
9495

95-
if let polling = opts!["forcePolling"] as? Bool {
96-
self.forcePolling = polling
96+
if let log = opts!["log"] as? Bool {
97+
self.log = log
9798
}
9899

99-
if let ws = opts!["forceWebsockets"] as? Bool {
100-
self.forceWebsockets = ws
100+
if let polling = opts!["forcePolling"] as? Bool {
101+
self.forcePolling = polling
101102
}
102103

103104
if var nsp = opts!["nsp"] as? String {
@@ -121,6 +122,10 @@ public final class SocketIOClient: NSObject, SocketEngineClient {
121122
if let reconnectWait = opts!["reconnectWait"] as? Int {
122123
self.reconnectWait = abs(reconnectWait)
123124
}
125+
126+
if let ws = opts!["forceWebsockets"] as? Bool {
127+
self.forceWebsockets = ws
128+
}
124129
} else {
125130
self.reconnectAttempts = -1
126131
}
@@ -133,10 +138,13 @@ public final class SocketIOClient: NSObject, SocketEngineClient {
133138
}
134139

135140
private func addEngine() {
141+
SocketLogger.log("Client: Adding engine", client: self)
142+
136143
self.engine = SocketEngine(client: self,
137144
forcePolling: self.forcePolling,
138145
forceWebsockets: self.forceWebsockets,
139-
withCookies: self.cookies)
146+
withCookies: self.cookies,
147+
logging: self.log)
140148
}
141149

142150
/**
@@ -145,6 +153,8 @@ public final class SocketIOClient: NSObject, SocketEngineClient {
145153
Pass true to fast if you're closing from a background task
146154
*/
147155
public func close(#fast:Bool) {
156+
SocketLogger.log("Client: Closing socket", client: self)
157+
148158
self.reconnects = false
149159
self._connecting = false
150160
self._connected = false
@@ -212,6 +222,8 @@ public final class SocketIOClient: NSObject, SocketEngineClient {
212222
}
213223

214224
func didConnect() {
225+
SocketLogger.log("Client: Socket connected", client: self)
226+
215227
self._closed = false
216228
self._connected = true
217229
self._connecting = false
@@ -228,6 +240,8 @@ public final class SocketIOClient: NSObject, SocketEngineClient {
228240

229241
/// error
230242
public func didError(reason:AnyObject) {
243+
SocketLogger.err("Client: Error", client: self)
244+
231245
self.handleEvent("error", data: reason as? [AnyObject] ?? [reason],
232246
isInternalMessage: true)
233247
}
@@ -299,6 +313,8 @@ public final class SocketIOClient: NSObject, SocketEngineClient {
299313
SocketParser.parseForEmit(packet)
300314
str = packet.createMessageForEvent(event)
301315

316+
SocketLogger.log("Client: Emitting: \(str)", client: self)
317+
302318
if packet.type == SocketPacket.PacketType.BINARY_EVENT {
303319
self.engine?.send(str, withData: packet.binary)
304320
} else {
@@ -319,6 +335,8 @@ public final class SocketIOClient: NSObject, SocketEngineClient {
319335
SocketParser.parseForEmit(packet)
320336
str = packet.createAck()
321337

338+
SocketLogger.log("Client: Emitting: \(str)", client: self!)
339+
322340
if packet.type == SocketPacket.PacketType.BINARY_ACK {
323341
self?.engine?.send(str, withData: packet.binary)
324342
} else {
@@ -333,6 +351,8 @@ public final class SocketIOClient: NSObject, SocketEngineClient {
333351
return
334352
}
335353

354+
SocketLogger.log("Client: Engine closed", client: self)
355+
336356
self._closed = true
337357
self._connected = false
338358
self.reconnects = false
@@ -343,6 +363,8 @@ public final class SocketIOClient: NSObject, SocketEngineClient {
343363

344364
// Called when the socket gets an ack for something it sent
345365
func handleAck(ack:Int, data:AnyObject?) {
366+
SocketLogger.log("Client: Handling ack: \(ack) with data: \(data)", client: self)
367+
346368
self.ackHandlers.executeAck(ack,
347369
items: data as? [AnyObject]? ?? data != nil ? [data!] : nil)
348370
}
@@ -357,6 +379,8 @@ public final class SocketIOClient: NSObject, SocketEngineClient {
357379
return
358380
}
359381

382+
SocketLogger.log("Client: Got event: \(event) with data: \(data)", client: self)
383+
360384
if self.anyHandler != nil {
361385
dispatch_async(dispatch_get_main_queue()) {[weak self] in
362386
self?.anyHandler?(SocketAnyEvent(event: event, items: data))
@@ -375,6 +399,8 @@ public final class SocketIOClient: NSObject, SocketEngineClient {
375399
}
376400

377401
func joinNamespace() {
402+
SocketLogger.log("Client: Joining namespace", client: self)
403+
378404
if self.nsp != "/" {
379405
self.engine?.send("0/\(self.nsp)", withData: nil)
380406
}
@@ -384,13 +410,17 @@ public final class SocketIOClient: NSObject, SocketEngineClient {
384410
Removes handler(s)
385411
*/
386412
public func off(event:String) {
413+
SocketLogger.log("Client: Removing handler for event: \(event)", client: self)
414+
387415
self.handlers = self.handlers.filter {$0.event == event ? false : true}
388416
}
389417

390418
/**
391419
Adds a handler for an event.
392420
*/
393421
public func on(name:String, callback:NormalCallback) {
422+
SocketLogger.log("Client: Adding handler for event: \(name)", client: self)
423+
394424
let handler = SocketEventHandler(event: name, callback: callback)
395425
self.handlers.append(handler)
396426
}
@@ -438,6 +468,8 @@ public final class SocketIOClient: NSObject, SocketEngineClient {
438468
}
439469

440470
if self.reconnectTimer == nil {
471+
SocketLogger.log("Client: Starting reconnect", client: self)
472+
441473
self._reconnecting = true
442474

443475
dispatch_async(dispatch_get_main_queue()) {[weak self] in
@@ -451,6 +483,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient {
451483
}
452484
}
453485

486+
SocketLogger.log("Client: Trying to reconnect", client: self)
454487
self.handleEvent("reconnectAttempt", data: [self.reconnectAttempts - self.currentReconnectAttempt],
455488
isInternalMessage: true)
456489

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
//
2+
// SocketLogger.swift
3+
// SocketIO-Swift
4+
//
5+
// Created by Erik Little on 4/11/15.
6+
//
7+
// Permission is hereby granted, free of charge, to any person obtaining a copy
8+
// of this software and associated documentation files (the "Software"), to deal
9+
// in the Software without restriction, including without limitation the rights
10+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11+
// copies of the Software, and to permit persons to whom the Software is
12+
// furnished to do so, subject to the following conditions:
13+
//
14+
// The above copyright notice and this permission notice shall be included in
15+
// all copies or substantial portions of the Software.
16+
//
17+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23+
// THE SOFTWARE.
24+
25+
import Foundation
26+
27+
protocol SocketLogClient {
28+
var log:Bool {get set}
29+
}
30+
31+
final class SocketLogger {
32+
static func log(message:String, client:SocketLogClient) {
33+
if client.log {
34+
NSLog("%@", message)
35+
}
36+
}
37+
38+
static func err(message:String, client:SocketLogClient) {
39+
if client.log {
40+
NSLog("ERROR %@", message)
41+
}
42+
}
43+
}

SocketIOClientSwift/SocketPacket.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,16 @@
2424

2525
import Foundation
2626

27-
final class SocketPacket {
27+
final class SocketPacket: Printable {
2828
var binary = ContiguousArray<NSData>()
2929
var currentPlace = 0
3030
var data:[AnyObject]?
31+
var description:String {
32+
var ret = "{SocketPacket\n\ttype: \(self.type?.rawValue)\n\tdata: \(self.data)\n\t" +
33+
"id: \(self.id)\n\tplaceholders: \(self.placeholders)"
34+
35+
return ret
36+
}
3137
var id:Int?
3238
var justAck = false
3339
var nsp = ""

0 commit comments

Comments
 (0)