Skip to content

Commit eb56a8d

Browse files
committed
merge master
2 parents dde941f + c2d488e commit eb56a8d

File tree

4 files changed

+69
-33
lines changed

4 files changed

+69
-33
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,8 @@ Methods
9696
2. `onAny(callback:((event:String, items:AnyObject?)) -> Void)` - Adds a handler for all events. It will be called on any received event.
9797
3. `emit(event:String, _ items:AnyObject...)` - Sends a message. Can send multiple items.
9898
4. `emitObjc(event:String, withItems items:[AnyObject])` - `emit` for Objective-C
99-
5. `emitWithAck(event:String, _ items:AnyObject...) -> (timeout:UInt64, callback:(NSArray?) -> Void) -> Void` - Sends a message that requests an acknowledgement from the server. Returns a function which you can use to add a handler. See example.
100-
6. `emitWithAckObjc(event:String, withItems items:[AnyObject]) -> (UInt64, (NSArray?) -> Void) -> Void` - `emitWithAck` for Objective-C.
99+
5. `emitWithAck(event:String, _ items:AnyObject...) -> (timeout:UInt64, callback:(NSArray?) -> Void) -> Void` - Sends a message that requests an acknowledgement from the server. Returns a function which you can use to add a handler. See example. Note: The message is not sent until you call the returned function.
100+
6. `emitWithAckObjc(event:String, withItems items:[AnyObject]) -> (UInt64, (NSArray?) -> Void) -> Void` - `emitWithAck` for Objective-C. Note: The message is not sent until you call the returned function.
101101
7. `connect()` - Establishes a connection to the server. A "connect" event is fired upon successful connection.
102102
8. `connectWithParams(params:[String: AnyObject])` - Establishes a connection to the server passing the specified params. A "connect" event is fired upon successful connection.
103103
9. `close(#fast:Bool)` - Closes the socket. Once a socket is closed it should not be reopened. Pass true to fast if you're closing from a background task.

Socket.IO-Client-Swift.podspec

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = "Socket.IO-Client-Swift"
3-
s.version = "1.5.0"
3+
s.version = "1.5.1"
44
s.summary = "Socket.IO-client for Swift"
55
s.description = <<-DESC
66
Socket.IO-client for Swift.
@@ -12,7 +12,7 @@ Pod::Spec.new do |s|
1212
s.author = { "Erik" => "nuclear.ace@gmail.com" }
1313
s.ios.deployment_target = '8.0'
1414
s.osx.deployment_target = '10.10'
15-
s.source = { :git => "https://github.com/socketio/socket.io-client-swift.git", :tag => 'v1.5.0' }
15+
s.source = { :git => "https://github.com/socketio/socket.io-client-swift.git", :tag => 'v1.5.1' }
1616
s.source_files = "SwiftIO/**/*.swift"
1717
s.requires_arc = true
1818
# s.dependency 'Starscream', '~> 0.9' # currently this repo includes Starscream swift files

SwiftIO/SocketEngine.swift

Lines changed: 64 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ public enum PacketType:String {
4444
}
4545

4646
public class SocketEngine: NSObject, WebSocketDelegate {
47-
unowned let client:SocketEngineClient
4847
private let workQueue = NSOperationQueue()
4948
private let emitQueue = dispatch_queue_create(
5049
"engineEmitQueue".cStringUsingEncoding(NSUTF8StringEncoding), DISPATCH_QUEUE_SERIAL)
@@ -70,6 +69,8 @@ public class SocketEngine: NSObject, WebSocketDelegate {
7069
var connected:Bool {
7170
return self._connected
7271
}
72+
73+
weak var client:SocketEngineClient?
7374
var cookies:[NSHTTPCookie]?
7475
var pingInterval:Int?
7576
var polling:Bool {
@@ -97,15 +98,11 @@ public class SocketEngine: NSObject, WebSocketDelegate {
9798
self.pingTimer?.invalidate()
9899
self.closed = true
99100

100-
if self.polling {
101-
self.write("", withType: PacketType.CLOSE, withData: nil)
102-
self.client.didForceClose("Disconnect")
103-
} else {
104-
self.ws?.disconnect()
101+
self.write("", withType: PacketType.CLOSE, withData: nil)
102+
self.ws?.disconnect()
105103

106-
if fast {
107-
self.client.didForceClose("Fast Disconnect")
108-
}
104+
if fast || self.polling {
105+
self.client?.didForceClose("Disconnect")
109106
}
110107
}
111108

@@ -126,11 +123,15 @@ public class SocketEngine: NSObject, WebSocketDelegate {
126123
}
127124

128125
private func createURLs(params:[String: AnyObject]?) -> (String, String) {
129-
var url = "\(self.client.socketURL)/socket.io/?transport="
126+
if self.client == nil {
127+
return ("", "")
128+
}
129+
130+
var url = "\(self.client!.socketURL)/socket.io/?transport="
130131
var urlPolling:String
131132
var urlWebSocket:String
132133

133-
if self.client.secure {
134+
if self.client!.secure {
134135
urlPolling = "https://" + url + "polling"
135136
urlWebSocket = "wss://" + url + "websocket"
136137
} else {
@@ -171,7 +172,12 @@ public class SocketEngine: NSObject, WebSocketDelegate {
171172
}
172173

173174
private func doFastUpgrade() {
174-
self.sendWebSocketMessage("", withType: PacketType.UPGRADE)
175+
if self.waitingForPoll {
176+
NSLog("Outstanding poll when switched to websockets," +
177+
"we'll probably disconnect soon. You should report this.")
178+
}
179+
180+
self.sendWebSocketMessage("", withType: PacketType.UPGRADE, datas: nil)
175181
self._websocket = true
176182
self._polling = false
177183
self.fastUpgrade = false
@@ -204,6 +210,8 @@ public class SocketEngine: NSObject, WebSocketDelegate {
204210
} else if err != nil {
205211
if self!.polling {
206212
self?.handlePollingFailed(err.localizedDescription)
213+
} else {
214+
NSLog(err.localizedDescription)
207215
}
208216

209217
return
@@ -223,7 +231,7 @@ public class SocketEngine: NSObject, WebSocketDelegate {
223231
if self!.fastUpgrade {
224232
self?.doFastUpgrade()
225233
return
226-
} else if !self!.closed && !self!.websocket {
234+
} else if !self!.closed && self!.polling {
227235
self?.doPoll()
228236
}
229237
}.resume()
@@ -288,14 +296,14 @@ public class SocketEngine: NSObject, WebSocketDelegate {
288296
} else if err != nil && self!.polling {
289297
self?.handlePollingFailed(err.localizedDescription)
290298
return
299+
} else if err != nil {
300+
NSLog(err.localizedDescription)
301+
return
291302
}
292303

293304
self?.waitingForPost = false
294305
dispatch_async(self!.emitQueue) {
295-
if self!.fastUpgrade {
296-
self?.doFastUpgrade()
297-
return
298-
} else {
306+
if !self!.fastUpgrade {
299307
self?.flushWaitingForPost()
300308
self?.doPoll()
301309
}
@@ -321,10 +329,14 @@ public class SocketEngine: NSObject, WebSocketDelegate {
321329
self.waitingForPoll = false
322330
self.waitingForPost = false
323331

324-
if !self.closed && !self.client.reconnecting {
325-
self.client.pollingDidFail(reason)
326-
} else if !self.client.reconnecting {
327-
self.client.didForceClose(reason)
332+
if self.client == nil {
333+
return
334+
}
335+
336+
if !self.closed && !self.client!.reconnecting {
337+
self.client?.pollingDidFail(reason)
338+
} else if !self.client!.reconnecting {
339+
self.client?.didForceClose(reason)
328340
}
329341
}
330342

@@ -414,8 +426,12 @@ public class SocketEngine: NSObject, WebSocketDelegate {
414426
}
415427

416428
private func parseEngineData(data:NSData) {
417-
dispatch_async(self.client.handleQueue) {[weak self] in
418-
self?.client.parseBinaryData(data.subdataWithRange(NSMakeRange(1, data.length - 1)))
429+
if self.client == nil {
430+
return
431+
}
432+
433+
dispatch_async(self.client!.handleQueue) {[weak self] in
434+
self?.client?.parseBinaryData(data.subdataWithRange(NSMakeRange(1, data.length - 1)))
419435
return
420436
}
421437
}
@@ -439,8 +455,13 @@ public class SocketEngine: NSObject, WebSocketDelegate {
439455
if let data = NSData(base64EncodedString: message,
440456
options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters) {
441457
// println("sending \(data)")
442-
dispatch_async(self.client.handleQueue) {[weak self] in
443-
self?.client.parseBinaryData(data)
458+
459+
if self.client == nil {
460+
return
461+
}
462+
463+
dispatch_async(self.client!.handleQueue) {[weak self] in
464+
self?.client?.parseBinaryData(data)
444465
return
445466
}
446467
}
@@ -492,8 +513,12 @@ public class SocketEngine: NSObject, WebSocketDelegate {
492513

493514
return
494515
} else if type == PacketType.CLOSE.rawValue {
516+
if self.client == nil {
517+
return
518+
}
519+
495520
if self.polling {
496-
self.client.didForceClose("Disconnect")
521+
self.client!.didForceClose("Disconnect")
497522
}
498523

499524
return
@@ -505,8 +530,12 @@ public class SocketEngine: NSObject, WebSocketDelegate {
505530
// Remove message type
506531
message.removeAtIndex(message.startIndex)
507532

508-
dispatch_async(self.client.handleQueue) {[weak self] in
509-
self?.client.parseSocketMessage(message)
533+
if self.client == nil {
534+
return
535+
}
536+
537+
dispatch_async(self.client!.handleQueue) {[weak self] in
538+
self?.client?.parseSocketMessage(message)
510539
return
511540
}
512541
}
@@ -588,6 +617,7 @@ public class SocketEngine: NSObject, WebSocketDelegate {
588617
if self.websocketConnected {
589618
// NSLog("Doing fast upgrade")
590619
// Do a fast upgrade
620+
// At this point, we should not send anymore polling messages-
591621
self.fastUpgrade = true
592622
self.sendPollMessage("", withType: PacketType.NOOP)
593623
}
@@ -628,13 +658,18 @@ public class SocketEngine: NSObject, WebSocketDelegate {
628658
self.websocketConnected = false
629659
self.probing = false
630660

661+
if self.closed {
662+
self.client?.didForceClose("Disconnect")
663+
return
664+
}
665+
631666
if self.websocket {
632667
self.pingTimer?.invalidate()
633668
self._connected = false
634669
self._websocket = false
635670

636671
let reason = error?.localizedDescription
637-
self.client.webSocketDidCloseWithCode(1,
672+
self.client?.webSocketDidCloseWithCode(1,
638673
reason: reason == nil ? "Socket Disconnected" : reason!)
639674
} else {
640675
self.flushProbeWait()

SwiftIO/SocketIOClient.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ public class SocketIOClient: NSObject, SocketEngineClient {
204204

205205
if timeout != 0 {
206206
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(timeout * NSEC_PER_SEC))
207+
207208
dispatch_after(time, dispatch_get_main_queue()) {
208209
self?.ackHandlers.timeoutAck(ack)
209210
return

0 commit comments

Comments
 (0)