merge master
This commit is contained in:
commit
eb56a8de9c
@ -96,8 +96,8 @@ Methods
|
|||||||
2. `onAny(callback:((event:String, items:AnyObject?)) -> Void)` - Adds a handler for all events. It will be called on any received event.
|
2. `onAny(callback:((event:String, items:AnyObject?)) -> Void)` - Adds a handler for all events. It will be called on any received event.
|
||||||
3. `emit(event:String, _ items:AnyObject...)` - Sends a message. Can send multiple items.
|
3. `emit(event:String, _ items:AnyObject...)` - Sends a message. Can send multiple items.
|
||||||
4. `emitObjc(event:String, withItems items:[AnyObject])` - `emit` for Objective-C
|
4. `emitObjc(event:String, withItems items:[AnyObject])` - `emit` for Objective-C
|
||||||
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.
|
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.
|
||||||
6. `emitWithAckObjc(event:String, withItems items:[AnyObject]) -> (UInt64, (NSArray?) -> Void) -> Void` - `emitWithAck` for Objective-C.
|
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.
|
||||||
7. `connect()` - Establishes a connection to the server. A "connect" event is fired upon successful connection.
|
7. `connect()` - Establishes a connection to the server. A "connect" event is fired upon successful connection.
|
||||||
8. `connectWithParams(params:[String: AnyObject])` - Establishes a connection to the server passing the specified params. A "connect" event is fired upon successful connection.
|
8. `connectWithParams(params:[String: AnyObject])` - Establishes a connection to the server passing the specified params. A "connect" event is fired upon successful connection.
|
||||||
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.
|
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.
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
Pod::Spec.new do |s|
|
Pod::Spec.new do |s|
|
||||||
s.name = "Socket.IO-Client-Swift"
|
s.name = "Socket.IO-Client-Swift"
|
||||||
s.version = "1.5.0"
|
s.version = "1.5.1"
|
||||||
s.summary = "Socket.IO-client for Swift"
|
s.summary = "Socket.IO-client for Swift"
|
||||||
s.description = <<-DESC
|
s.description = <<-DESC
|
||||||
Socket.IO-client for Swift.
|
Socket.IO-client for Swift.
|
||||||
@ -12,7 +12,7 @@ Pod::Spec.new do |s|
|
|||||||
s.author = { "Erik" => "nuclear.ace@gmail.com" }
|
s.author = { "Erik" => "nuclear.ace@gmail.com" }
|
||||||
s.ios.deployment_target = '8.0'
|
s.ios.deployment_target = '8.0'
|
||||||
s.osx.deployment_target = '10.10'
|
s.osx.deployment_target = '10.10'
|
||||||
s.source = { :git => "https://github.com/socketio/socket.io-client-swift.git", :tag => 'v1.5.0' }
|
s.source = { :git => "https://github.com/socketio/socket.io-client-swift.git", :tag => 'v1.5.1' }
|
||||||
s.source_files = "SwiftIO/**/*.swift"
|
s.source_files = "SwiftIO/**/*.swift"
|
||||||
s.requires_arc = true
|
s.requires_arc = true
|
||||||
# s.dependency 'Starscream', '~> 0.9' # currently this repo includes Starscream swift files
|
# s.dependency 'Starscream', '~> 0.9' # currently this repo includes Starscream swift files
|
||||||
|
|||||||
@ -44,7 +44,6 @@ public enum PacketType:String {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public class SocketEngine: NSObject, WebSocketDelegate {
|
public class SocketEngine: NSObject, WebSocketDelegate {
|
||||||
unowned let client:SocketEngineClient
|
|
||||||
private let workQueue = NSOperationQueue()
|
private let workQueue = NSOperationQueue()
|
||||||
private let emitQueue = dispatch_queue_create(
|
private let emitQueue = dispatch_queue_create(
|
||||||
"engineEmitQueue".cStringUsingEncoding(NSUTF8StringEncoding), DISPATCH_QUEUE_SERIAL)
|
"engineEmitQueue".cStringUsingEncoding(NSUTF8StringEncoding), DISPATCH_QUEUE_SERIAL)
|
||||||
@ -70,6 +69,8 @@ public class SocketEngine: NSObject, WebSocketDelegate {
|
|||||||
var connected:Bool {
|
var connected:Bool {
|
||||||
return self._connected
|
return self._connected
|
||||||
}
|
}
|
||||||
|
|
||||||
|
weak var client:SocketEngineClient?
|
||||||
var cookies:[NSHTTPCookie]?
|
var cookies:[NSHTTPCookie]?
|
||||||
var pingInterval:Int?
|
var pingInterval:Int?
|
||||||
var polling:Bool {
|
var polling:Bool {
|
||||||
@ -97,15 +98,11 @@ public class SocketEngine: NSObject, WebSocketDelegate {
|
|||||||
self.pingTimer?.invalidate()
|
self.pingTimer?.invalidate()
|
||||||
self.closed = true
|
self.closed = true
|
||||||
|
|
||||||
if self.polling {
|
self.write("", withType: PacketType.CLOSE, withData: nil)
|
||||||
self.write("", withType: PacketType.CLOSE, withData: nil)
|
self.ws?.disconnect()
|
||||||
self.client.didForceClose("Disconnect")
|
|
||||||
} else {
|
|
||||||
self.ws?.disconnect()
|
|
||||||
|
|
||||||
if fast {
|
if fast || self.polling {
|
||||||
self.client.didForceClose("Fast Disconnect")
|
self.client?.didForceClose("Disconnect")
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,11 +123,15 @@ public class SocketEngine: NSObject, WebSocketDelegate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func createURLs(params:[String: AnyObject]?) -> (String, String) {
|
private func createURLs(params:[String: AnyObject]?) -> (String, String) {
|
||||||
var url = "\(self.client.socketURL)/socket.io/?transport="
|
if self.client == nil {
|
||||||
|
return ("", "")
|
||||||
|
}
|
||||||
|
|
||||||
|
var url = "\(self.client!.socketURL)/socket.io/?transport="
|
||||||
var urlPolling:String
|
var urlPolling:String
|
||||||
var urlWebSocket:String
|
var urlWebSocket:String
|
||||||
|
|
||||||
if self.client.secure {
|
if self.client!.secure {
|
||||||
urlPolling = "https://" + url + "polling"
|
urlPolling = "https://" + url + "polling"
|
||||||
urlWebSocket = "wss://" + url + "websocket"
|
urlWebSocket = "wss://" + url + "websocket"
|
||||||
} else {
|
} else {
|
||||||
@ -171,7 +172,12 @@ public class SocketEngine: NSObject, WebSocketDelegate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func doFastUpgrade() {
|
private func doFastUpgrade() {
|
||||||
self.sendWebSocketMessage("", withType: PacketType.UPGRADE)
|
if self.waitingForPoll {
|
||||||
|
NSLog("Outstanding poll when switched to websockets," +
|
||||||
|
"we'll probably disconnect soon. You should report this.")
|
||||||
|
}
|
||||||
|
|
||||||
|
self.sendWebSocketMessage("", withType: PacketType.UPGRADE, datas: nil)
|
||||||
self._websocket = true
|
self._websocket = true
|
||||||
self._polling = false
|
self._polling = false
|
||||||
self.fastUpgrade = false
|
self.fastUpgrade = false
|
||||||
@ -204,6 +210,8 @@ public class SocketEngine: NSObject, WebSocketDelegate {
|
|||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
if self!.polling {
|
if self!.polling {
|
||||||
self?.handlePollingFailed(err.localizedDescription)
|
self?.handlePollingFailed(err.localizedDescription)
|
||||||
|
} else {
|
||||||
|
NSLog(err.localizedDescription)
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
@ -223,7 +231,7 @@ public class SocketEngine: NSObject, WebSocketDelegate {
|
|||||||
if self!.fastUpgrade {
|
if self!.fastUpgrade {
|
||||||
self?.doFastUpgrade()
|
self?.doFastUpgrade()
|
||||||
return
|
return
|
||||||
} else if !self!.closed && !self!.websocket {
|
} else if !self!.closed && self!.polling {
|
||||||
self?.doPoll()
|
self?.doPoll()
|
||||||
}
|
}
|
||||||
}.resume()
|
}.resume()
|
||||||
@ -288,14 +296,14 @@ public class SocketEngine: NSObject, WebSocketDelegate {
|
|||||||
} else if err != nil && self!.polling {
|
} else if err != nil && self!.polling {
|
||||||
self?.handlePollingFailed(err.localizedDescription)
|
self?.handlePollingFailed(err.localizedDescription)
|
||||||
return
|
return
|
||||||
|
} else if err != nil {
|
||||||
|
NSLog(err.localizedDescription)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
self?.waitingForPost = false
|
self?.waitingForPost = false
|
||||||
dispatch_async(self!.emitQueue) {
|
dispatch_async(self!.emitQueue) {
|
||||||
if self!.fastUpgrade {
|
if !self!.fastUpgrade {
|
||||||
self?.doFastUpgrade()
|
|
||||||
return
|
|
||||||
} else {
|
|
||||||
self?.flushWaitingForPost()
|
self?.flushWaitingForPost()
|
||||||
self?.doPoll()
|
self?.doPoll()
|
||||||
}
|
}
|
||||||
@ -321,10 +329,14 @@ public class SocketEngine: NSObject, WebSocketDelegate {
|
|||||||
self.waitingForPoll = false
|
self.waitingForPoll = false
|
||||||
self.waitingForPost = false
|
self.waitingForPost = false
|
||||||
|
|
||||||
if !self.closed && !self.client.reconnecting {
|
if self.client == nil {
|
||||||
self.client.pollingDidFail(reason)
|
return
|
||||||
} else if !self.client.reconnecting {
|
}
|
||||||
self.client.didForceClose(reason)
|
|
||||||
|
if !self.closed && !self.client!.reconnecting {
|
||||||
|
self.client?.pollingDidFail(reason)
|
||||||
|
} else if !self.client!.reconnecting {
|
||||||
|
self.client?.didForceClose(reason)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -414,8 +426,12 @@ public class SocketEngine: NSObject, WebSocketDelegate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func parseEngineData(data:NSData) {
|
private func parseEngineData(data:NSData) {
|
||||||
dispatch_async(self.client.handleQueue) {[weak self] in
|
if self.client == nil {
|
||||||
self?.client.parseBinaryData(data.subdataWithRange(NSMakeRange(1, data.length - 1)))
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
dispatch_async(self.client!.handleQueue) {[weak self] in
|
||||||
|
self?.client?.parseBinaryData(data.subdataWithRange(NSMakeRange(1, data.length - 1)))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -439,8 +455,13 @@ public class SocketEngine: NSObject, WebSocketDelegate {
|
|||||||
if let data = NSData(base64EncodedString: message,
|
if let data = NSData(base64EncodedString: message,
|
||||||
options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters) {
|
options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters) {
|
||||||
// println("sending \(data)")
|
// println("sending \(data)")
|
||||||
dispatch_async(self.client.handleQueue) {[weak self] in
|
|
||||||
self?.client.parseBinaryData(data)
|
if self.client == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
dispatch_async(self.client!.handleQueue) {[weak self] in
|
||||||
|
self?.client?.parseBinaryData(data)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -492,8 +513,12 @@ public class SocketEngine: NSObject, WebSocketDelegate {
|
|||||||
|
|
||||||
return
|
return
|
||||||
} else if type == PacketType.CLOSE.rawValue {
|
} else if type == PacketType.CLOSE.rawValue {
|
||||||
|
if self.client == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if self.polling {
|
if self.polling {
|
||||||
self.client.didForceClose("Disconnect")
|
self.client!.didForceClose("Disconnect")
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
@ -505,8 +530,12 @@ public class SocketEngine: NSObject, WebSocketDelegate {
|
|||||||
// Remove message type
|
// Remove message type
|
||||||
message.removeAtIndex(message.startIndex)
|
message.removeAtIndex(message.startIndex)
|
||||||
|
|
||||||
dispatch_async(self.client.handleQueue) {[weak self] in
|
if self.client == nil {
|
||||||
self?.client.parseSocketMessage(message)
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
dispatch_async(self.client!.handleQueue) {[weak self] in
|
||||||
|
self?.client?.parseSocketMessage(message)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -588,6 +617,7 @@ public class SocketEngine: NSObject, WebSocketDelegate {
|
|||||||
if self.websocketConnected {
|
if self.websocketConnected {
|
||||||
// NSLog("Doing fast upgrade")
|
// NSLog("Doing fast upgrade")
|
||||||
// Do a fast upgrade
|
// Do a fast upgrade
|
||||||
|
// At this point, we should not send anymore polling messages-
|
||||||
self.fastUpgrade = true
|
self.fastUpgrade = true
|
||||||
self.sendPollMessage("", withType: PacketType.NOOP)
|
self.sendPollMessage("", withType: PacketType.NOOP)
|
||||||
}
|
}
|
||||||
@ -628,13 +658,18 @@ public class SocketEngine: NSObject, WebSocketDelegate {
|
|||||||
self.websocketConnected = false
|
self.websocketConnected = false
|
||||||
self.probing = false
|
self.probing = false
|
||||||
|
|
||||||
|
if self.closed {
|
||||||
|
self.client?.didForceClose("Disconnect")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if self.websocket {
|
if self.websocket {
|
||||||
self.pingTimer?.invalidate()
|
self.pingTimer?.invalidate()
|
||||||
self._connected = false
|
self._connected = false
|
||||||
self._websocket = false
|
self._websocket = false
|
||||||
|
|
||||||
let reason = error?.localizedDescription
|
let reason = error?.localizedDescription
|
||||||
self.client.webSocketDidCloseWithCode(1,
|
self.client?.webSocketDidCloseWithCode(1,
|
||||||
reason: reason == nil ? "Socket Disconnected" : reason!)
|
reason: reason == nil ? "Socket Disconnected" : reason!)
|
||||||
} else {
|
} else {
|
||||||
self.flushProbeWait()
|
self.flushProbeWait()
|
||||||
|
|||||||
@ -204,6 +204,7 @@ public class SocketIOClient: NSObject, SocketEngineClient {
|
|||||||
|
|
||||||
if timeout != 0 {
|
if timeout != 0 {
|
||||||
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(timeout * NSEC_PER_SEC))
|
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(timeout * NSEC_PER_SEC))
|
||||||
|
|
||||||
dispatch_after(time, dispatch_get_main_queue()) {
|
dispatch_after(time, dispatch_get_main_queue()) {
|
||||||
self?.ackHandlers.timeoutAck(ack)
|
self?.ackHandlers.timeoutAck(ack)
|
||||||
return
|
return
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user