merge master
This commit is contained in:
commit
b576294232
@ -1,6 +1,6 @@
|
||||
Pod::Spec.new do |s|
|
||||
s.name = "Socket.IO-Client-Swift"
|
||||
s.version = "1.3.1"
|
||||
s.version = "1.3.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.3.1' }
|
||||
s.source = { :git => "https://github.com/socketio/socket.io-client-swift.git", :tag => 'v1.3.2' }
|
||||
s.source_files = "SwiftIO/**/*.swift"
|
||||
s.requires_arc = true
|
||||
# s.dependency 'Starscream', '~> 0.9' # currently this repo includes Starscream swift files
|
||||
|
||||
@ -81,7 +81,7 @@ public class SocketEngine: NSObject, WebSocketDelegate {
|
||||
}
|
||||
var ws:WebSocket?
|
||||
|
||||
init(client:SocketEngineClient, forcePolling:Bool = false, withCookies cookies:[NSHTTPCookie]?) {
|
||||
init(client:SocketEngineClient, forcePolling:Bool, withCookies cookies:[NSHTTPCookie]?) {
|
||||
self.client = client
|
||||
self.forcePolling = forcePolling
|
||||
self.cookies = cookies
|
||||
|
||||
@ -28,12 +28,10 @@ public typealias NormalCallback = (NSArray?, AckEmitter?) -> Void
|
||||
public typealias AnyHandler = (event:String, items:AnyObject?)
|
||||
public typealias AckEmitter = (AnyObject...) -> Void
|
||||
|
||||
private func emitAckCallback(socket:SocketIOClient, num:Int, type:Int) -> AckEmitter {
|
||||
func emitter(items:AnyObject...) {
|
||||
private func emitAckCallback(socket:SocketIOClient, num:Int, type:Int)
|
||||
// Curried
|
||||
(items:AnyObject...) -> Void {
|
||||
socket.emitAck(num, withData: items, withAckType: type)
|
||||
}
|
||||
|
||||
return emitter
|
||||
}
|
||||
|
||||
class SocketEventHandler {
|
||||
|
||||
@ -75,6 +75,9 @@ public class SocketIOClient: NSObject, SocketEngineClient {
|
||||
return self._sid
|
||||
}
|
||||
|
||||
/**
|
||||
Create a new SocketIOClient. opts can be omitted
|
||||
*/
|
||||
public init(var socketURL:String, opts:NSDictionary? = nil) {
|
||||
if socketURL["https://"].matches().count != 0 {
|
||||
self._secure = true
|
||||
@ -127,7 +130,9 @@ public class SocketIOClient: NSObject, SocketEngineClient {
|
||||
self.init(socketURL: socketURL, opts: options)
|
||||
}
|
||||
|
||||
// Closes the socket
|
||||
/**
|
||||
Closes the socket. Only reopen the same socket if you know what you're doing.
|
||||
*/
|
||||
public func close() {
|
||||
self._closed = true
|
||||
self._connecting = false
|
||||
@ -136,7 +141,9 @@ public class SocketIOClient: NSObject, SocketEngineClient {
|
||||
self.engine?.close()
|
||||
}
|
||||
|
||||
// Connects to the server
|
||||
/**
|
||||
Connect to the server.
|
||||
*/
|
||||
public func connect() {
|
||||
if self.closed {
|
||||
println("Warning! This socket was previously closed. This might be dangerous!")
|
||||
@ -146,7 +153,9 @@ public class SocketIOClient: NSObject, SocketEngineClient {
|
||||
self.engine?.open()
|
||||
}
|
||||
|
||||
// Connect to the server using params
|
||||
/**
|
||||
Connect to the server with params that will be passed on connection.
|
||||
*/
|
||||
public func connectWithParams(params:[String: AnyObject]) {
|
||||
if self.closed {
|
||||
println("Warning! This socket was previously closed. This might be dangerous!")
|
||||
@ -174,7 +183,7 @@ public class SocketIOClient: NSObject, SocketEngineClient {
|
||||
self.handleEvent("connect", data: nil, isInternalMessage: false)
|
||||
}
|
||||
|
||||
// Server wants us to die
|
||||
/// Server wants us to die
|
||||
func didForceClose(#message:String) {
|
||||
self._closed = true
|
||||
self._connected = false
|
||||
@ -184,9 +193,9 @@ public class SocketIOClient: NSObject, SocketEngineClient {
|
||||
self.handleEvent("disconnect", data: message, isInternalMessage: true)
|
||||
}
|
||||
|
||||
// Sends a message with multiple args
|
||||
// If a message contains binary we have to send those
|
||||
// seperately.
|
||||
/**
|
||||
Send a message to the server
|
||||
*/
|
||||
public func emit(event:String, _ args:AnyObject...) {
|
||||
if !self.connected {
|
||||
return
|
||||
@ -198,11 +207,17 @@ public class SocketIOClient: NSObject, SocketEngineClient {
|
||||
}
|
||||
}
|
||||
|
||||
// Objc doesn't have variadics
|
||||
/**
|
||||
Same as emit, but meant for Objective-C
|
||||
*/
|
||||
public func emitObjc(event:String, withItems items:[AnyObject]) {
|
||||
self.emit(event, items)
|
||||
}
|
||||
|
||||
/**
|
||||
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 {
|
||||
if !self.connected {
|
||||
return SocketAckHandler(event: "fail", socket: self)
|
||||
@ -221,6 +236,9 @@ public class SocketIOClient: NSObject, SocketEngineClient {
|
||||
return ackHandler
|
||||
}
|
||||
|
||||
/**
|
||||
Same as emitWithAck, but for Objective-C
|
||||
*/
|
||||
public func emitWithAckObjc(event:String, withItems items:[AnyObject]) -> SocketAckHandler {
|
||||
return self.emitWithAck(event, items)
|
||||
}
|
||||
@ -265,6 +283,7 @@ public class SocketIOClient: NSObject, SocketEngineClient {
|
||||
return
|
||||
}
|
||||
|
||||
// println("sending ack: \(ack) \(data)")
|
||||
let (items, hasBinary, emitDatas) = SocketParser.parseEmitArgs(data!)
|
||||
var str:String
|
||||
|
||||
@ -311,7 +330,9 @@ public class SocketIOClient: NSObject, SocketEngineClient {
|
||||
}
|
||||
}
|
||||
|
||||
// Handles events
|
||||
/**
|
||||
Causes an event to be handled. Only use if you know what you're doing.
|
||||
*/
|
||||
public func handleEvent(event:String, data:AnyObject?, isInternalMessage:Bool = false,
|
||||
wantsAck ack:Int? = nil, withAckType ackType:Int = 3) {
|
||||
// println("Should do event: \(event) with data: \(data)")
|
||||
@ -363,18 +384,24 @@ public class SocketIOClient: NSObject, SocketEngineClient {
|
||||
}
|
||||
}
|
||||
|
||||
// Adds handler for an event
|
||||
/**
|
||||
Adds a handler for an event.
|
||||
*/
|
||||
public func on(name:String, callback:NormalCallback) {
|
||||
let handler = SocketEventHandler(event: name, callback: callback)
|
||||
self.handlers.append(handler)
|
||||
}
|
||||
|
||||
// Adds a handler for any event
|
||||
/**
|
||||
Adds a handler that will be called on every event.
|
||||
*/
|
||||
public func onAny(handler:(AnyHandler) -> Void) {
|
||||
self.anyHandler = handler
|
||||
}
|
||||
|
||||
// Opens the connection to the socket
|
||||
/**
|
||||
Same as connect
|
||||
*/
|
||||
public func open() {
|
||||
self.connect()
|
||||
}
|
||||
|
||||
@ -220,39 +220,20 @@ class SocketParser {
|
||||
return
|
||||
}
|
||||
|
||||
var messageGroups:[String]?
|
||||
|
||||
let type = stringMessage.removeAtIndex(stringMessage.startIndex)
|
||||
|
||||
if type == "2" {
|
||||
if let groups = stringMessage["(\\d*)\\/?(\\w*)?,?(\\d*)?\\[\"(.*?)\",?(.*?)?\\]$",
|
||||
if let groups = stringMessage["(\\/(\\w*))?,?(\\d*)?\\[\"(.*?)\",?(.*?)?\\]$",
|
||||
NSRegularExpressionOptions.DotMatchesLineSeparators].groups() {
|
||||
messageGroups = groups
|
||||
|
||||
var mesNum = messageGroups![1]
|
||||
var ackNum:String
|
||||
var namespace:String?
|
||||
|
||||
if mesNum == "" {
|
||||
ackNum = ""
|
||||
} else if messageGroups![3] != "" {
|
||||
ackNum = messageGroups![3]
|
||||
} else {
|
||||
let range = Range<String.Index>(start: mesNum.startIndex,
|
||||
end: advance(mesNum.startIndex, 1))
|
||||
mesNum.replaceRange(range, with: "")
|
||||
ackNum = mesNum
|
||||
}
|
||||
|
||||
namespace = messageGroups![2]
|
||||
let namespace = groups[2]
|
||||
let ackNum = groups[3]
|
||||
let event = groups[4]
|
||||
let data = "[\(groups[5])]"
|
||||
|
||||
if namespace == "" && socket.nsp != nil {
|
||||
return
|
||||
}
|
||||
|
||||
let event = messageGroups![4]
|
||||
let data = "[\(messageGroups![5])]"
|
||||
|
||||
if let parsed:AnyObject = self.parseData(data) {
|
||||
if ackNum == "" {
|
||||
socket.handleEvent(event, data: parsed)
|
||||
@ -264,25 +245,16 @@ class SocketParser {
|
||||
}
|
||||
}
|
||||
} else if type == "3" {
|
||||
if let ackGroup = stringMessage["(\\d*)\\/?(\\w*)?,?(\\d*)?\\[(.*?)?\\]$",
|
||||
if let ackGroup = stringMessage["(\\/(\\w*))?,?(\\d*)?\\[(.*?)?\\]$",
|
||||
NSRegularExpressionOptions.DotMatchesLineSeparators].groups() {
|
||||
messageGroups = ackGroup
|
||||
|
||||
let arr = Array(messageGroups![1])
|
||||
var ackNum:String
|
||||
let nsp = messageGroups![2]
|
||||
let nsp = ackGroup[2]
|
||||
let ackNum = ackGroup[3]
|
||||
let ackData:AnyObject? = self.parseData("[\(ackGroup[4])]")
|
||||
|
||||
if nsp == "" && socket.nsp != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if nsp == "" {
|
||||
ackNum = String(arr[0...arr.count-1])
|
||||
} else {
|
||||
ackNum = messageGroups![3]
|
||||
}
|
||||
|
||||
let ackData:AnyObject? = self.parseData("[\(messageGroups![4])]")
|
||||
socket.handleAck(ackNum.toInt()!, data: ackData)
|
||||
}
|
||||
} else {
|
||||
@ -346,32 +318,17 @@ class SocketParser {
|
||||
// Tries to parse a message that contains binary
|
||||
class func parseBinaryMessage(var message:String, socket:SocketIOClient) {
|
||||
// NSLog(message)
|
||||
var binaryGroup:[String]?
|
||||
|
||||
let type = message.removeAtIndex(message.startIndex)
|
||||
|
||||
if type == "5" {
|
||||
if let groups = message["^(\\d*)-\\/?(\\w*)?,?(\\d*)?\\[(\".*?\")?,?(.*)?\\]$",
|
||||
if let groups = message["^(\\d*)-(\\/(\\w*))?,?(\\d*)?\\[\"(.*?)\",?(.*)?\\]$",
|
||||
NSRegularExpressionOptions.DotMatchesLineSeparators].groups() {
|
||||
binaryGroup = groups
|
||||
|
||||
var ackNum:String
|
||||
var event:String
|
||||
var mutMessageObject:String
|
||||
var namespace:String?
|
||||
let numberOfPlaceholders = binaryGroup![1]
|
||||
|
||||
namespace = binaryGroup![2]
|
||||
if binaryGroup![3] != "" {
|
||||
ackNum = binaryGroup![3] as String
|
||||
} else if socket.nsp == nil && binaryGroup![2] != "" {
|
||||
ackNum = binaryGroup![2]
|
||||
} else {
|
||||
ackNum = ""
|
||||
}
|
||||
|
||||
event = (binaryGroup![4]["\""] ~= "") as String
|
||||
mutMessageObject = binaryGroup![5]
|
||||
let numberOfPlaceholders = groups[1]
|
||||
let namespace = groups[3]
|
||||
let ackNum = groups[4]
|
||||
let event = groups[5]
|
||||
let mutMessageObject = groups[6]
|
||||
|
||||
if namespace == "" && socket.nsp != nil {
|
||||
return
|
||||
@ -393,26 +350,16 @@ class SocketParser {
|
||||
socket.waitingData.append(mes)
|
||||
}
|
||||
} else if type == "6" {
|
||||
if let groups = message["^(\\d*)-\\/?(\\w*)?,?(\\d*)?\\[(.*?)?\\]$",
|
||||
if let groups = message["^(\\d*)-(\\/(\\w*))?,?(\\d*)?\\[(.*?)?\\]$",
|
||||
NSRegularExpressionOptions.DotMatchesLineSeparators].groups() {
|
||||
binaryGroup = groups
|
||||
let numberOfPlaceholders = groups[1]
|
||||
let namespace = groups[3]
|
||||
let ackNum = groups[4]
|
||||
let mutMessageObject = groups[5]
|
||||
|
||||
let numberOfPlaceholders = binaryGroup![1]
|
||||
var ackNum:String
|
||||
var nsp:String
|
||||
|
||||
if binaryGroup![3] == "" {
|
||||
ackNum = binaryGroup![2]
|
||||
nsp = ""
|
||||
} else {
|
||||
ackNum = binaryGroup![3]
|
||||
nsp = binaryGroup![2]
|
||||
}
|
||||
|
||||
if nsp == "" && socket.nsp != nil {
|
||||
if namespace == "" && socket.nsp != nil {
|
||||
return
|
||||
}
|
||||
var mutMessageObject = binaryGroup![4]
|
||||
let placeholdersRemoved = mutMessageObject["(\\{\"_placeholder\":true,\"num\":(\\d*)\\})"]
|
||||
~= "\"~~$2\""
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user