From f008f116a6fb9c6f5d055bd37463013154067999 Mon Sep 17 00:00:00 2001 From: Erik Date: Thu, 26 Mar 2015 10:13:30 -0400 Subject: [PATCH 1/2] fix socketio/socket.io-client-swift#27 --- README.md | 4 ++-- SwiftIO/SocketIOClient.swift | 33 +++++++++++++++++++++++++++------ 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 35ef5ac..3be7c48 100644 --- a/README.md +++ b/README.md @@ -47,9 +47,9 @@ Methods ------- 1. `socket.on(name:String, callback:((data:NSArray?, ack:AckEmitter?) -> Void))` - Adds a handler for an event. Items are passed by an array. `ack` can be used to send an ack when one is requested. See example. 2. `socket.onAny(callback:((event:String, items:AnyObject?)) -> Void)` - Adds a handler for all events. It will be called on any received event. -3. `socket.emit(event:String, _ args:AnyObject...)` - Sends a message. Can send multiple args. +3. `socket.emit(event:String, _ items:AnyObject...)` - Sends a message. Can send multiple items. 4. `socket.emitObjc(event:String, withItems items:[AnyObject])` - `emit` for Objective-C -5. `socket.emitWithAck(event:String, _ args:AnyObject...) -> SocketAckHandler` - Sends a message that requests an acknowledgement from the server. Returns a SocketAckHandler which you can use to add an onAck handler. See example. +5. `socket.emitWithAck(event:String, _ items:AnyObject...) -> SocketAckHandler` - Sends a message that requests an acknowledgement from the server. Returns a SocketAckHandler which you can use to add an onAck handler. See example. 6. `socket.emitWithAckObjc(event:String, withItems items:[AnyObject]) -> SocketAckHandler` - `emitWithAck` for Objective-C. 7. `socket.connect()` - Establishes a connection to the server. A "connect" event is fired upon successful connection. 8. `socket.connectWithParams(params:[String: AnyObject])` - Establishes a connection to the server passing the specified params. A "connect" event is fired upon successful connection. diff --git a/SwiftIO/SocketIOClient.swift b/SwiftIO/SocketIOClient.swift index d0f74f6..5e0119a 100644 --- a/SwiftIO/SocketIOClient.swift +++ b/SwiftIO/SocketIOClient.swift @@ -200,13 +200,13 @@ public class SocketIOClient: NSObject, SocketEngineClient { /** Send a message to the server */ - public func emit(event:String, _ args:AnyObject...) { + public func emit(event:String, _ items:AnyObject...) { if !self.connected { return } dispatch_async(self.emitQueue) {[weak self] in - self?._emit(event, args) + self?._emit(event, items) return } } @@ -215,14 +215,21 @@ public class SocketIOClient: NSObject, SocketEngineClient { Same as emit, but meant for Objective-C */ public func emitObjc(event:String, withItems items:[AnyObject]) { - self.emit(event, items) + if !self.connected { + return + } + + dispatch_async(self.emitQueue) {[weak self] in + self?._emit(event, items) + return + } } /** Sends a message to the server, requesting an ack. Use the onAck method of SocketAckHandler to add an ack. */ - public func emitWithAck(event:String, _ args:AnyObject...) -> SocketAckHandler { + public func emitWithAck(event:String, _ items:AnyObject...) -> SocketAckHandler { if !self.connected { return SocketAckHandler(event: "fail", socket: self) } @@ -233,7 +240,7 @@ public class SocketIOClient: NSObject, SocketEngineClient { self.ackHandlers.append(ackHandler) dispatch_async(self.emitQueue) {[weak self, ack = self.currentAck] in - self?._emit(event, args, ack: ack) + self?._emit(event, items, ack: ack) return } @@ -244,7 +251,21 @@ public class SocketIOClient: NSObject, SocketEngineClient { Same as emitWithAck, but for Objective-C */ public func emitWithAckObjc(event:String, withItems items:[AnyObject]) -> SocketAckHandler { - return self.emitWithAck(event, items) + if !self.connected { + return SocketAckHandler(event: "fail", socket: self) + } + + self.currentAck++ + let ackHandler = SocketAckHandler(event: event, + ackNum: self.currentAck, socket: self) + self.ackHandlers.append(ackHandler) + + dispatch_async(self.emitQueue) {[weak self, ack = self.currentAck] in + self?._emit(event, items, ack: ack) + return + } + + return ackHandler } private func _emit(event:String, _ args:[AnyObject], ack:Int? = nil) { From 2cae405d29193cff075b2176185a2b89f14c1ead Mon Sep 17 00:00:00 2001 From: Erik Date: Thu, 26 Mar 2015 13:15:43 -0400 Subject: [PATCH 2/2] try and avoid bad engine states --- Socket.IO-Client-Swift.podspec | 4 ++-- SwiftIO/SocketIOClient.swift | 12 ++++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Socket.IO-Client-Swift.podspec b/Socket.IO-Client-Swift.podspec index dc46600..ab5261a 100644 --- a/Socket.IO-Client-Swift.podspec +++ b/Socket.IO-Client-Swift.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "Socket.IO-Client-Swift" - s.version = "1.4.0" + s.version = "1.4.2" s.summary = "Socket.IO-client for Swift" s.description = <<-DESC Socket.IO-client for Swift. @@ -12,7 +12,7 @@ Pod::Spec.new do |s| s.author = { "Erik" => "nuclear.ace@gmail.com" } s.ios.deployment_target = '8.0' s.osx.deployment_target = '10.10' - s.source = { :git => "https://github.com/socketio/socket.io-client-swift.git", :tag => 'v1.4.0' } + s.source = { :git => "https://github.com/socketio/socket.io-client-swift.git", :tag => 'v1.4.2' } s.source_files = "SwiftIO/**/*.swift" s.requires_arc = true # s.dependency 'Starscream', '~> 0.9' # currently this repo includes Starscream swift files diff --git a/SwiftIO/SocketIOClient.swift b/SwiftIO/SocketIOClient.swift index 5e0119a..144925b 100644 --- a/SwiftIO/SocketIOClient.swift +++ b/SwiftIO/SocketIOClient.swift @@ -118,16 +118,18 @@ public class SocketIOClient: NSObject, SocketEngineClient { } super.init() - - self.engine = SocketEngine(client: self, - forcePolling: self.forcePolling, - withCookies: self.cookies) } public convenience init(socketURL:String, options:NSDictionary?) { self.init(socketURL: socketURL, opts: options) } + private func addEngine() { + self.engine = SocketEngine(client: self, + forcePolling: self.forcePolling, + withCookies: self.cookies) + } + /** Closes the socket. Only reopen the same socket if you know what you're doing. Will turn off automatic reconnects. @@ -150,6 +152,7 @@ public class SocketIOClient: NSObject, SocketEngineClient { self._closed = false } + self.addEngine() self.engine?.open() } @@ -165,6 +168,7 @@ public class SocketIOClient: NSObject, SocketEngineClient { self.params = params self.paramConnect = true + self.addEngine() self.engine?.open(opts: params) }