#15 add connectWithParams

This commit is contained in:
Erik 2015-02-24 12:59:56 -05:00
parent 516d9b3eea
commit 5b9537065f
2 changed files with 46 additions and 10 deletions

View File

@ -22,6 +22,7 @@ Methods
3. `socket.emit(event:String, args:AnyObject...)` - Sends a message. Can send multiple args.
4. `socket.emitWithAck(event:String, args:AnyObject...) -> SocketAckHandler` - Sends a message that requests an acknoweldgement from the server. Returns a SocketAckHandler which you can use to add an onAck handler. See example.
5. `socket.connect()` - Establishes a connection to the server. A "connect" event is fired upon successful connection.
6. `socket.connectWithParams` - Establishes a connection to the server, passing the specified params. A "connect" event is fired upon successful connection.
6. `socket.close()` - Closes the socket. Once a socket is closed it should not be reopened.
Events

View File

@ -32,10 +32,12 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
DISPATCH_QUEUE_SERIAL)
let emitQueue = dispatch_queue_create("emitQueue".cStringUsingEncoding(NSUTF8StringEncoding),
DISPATCH_QUEUE_SERIAL)
private lazy var params:[String: AnyObject] = [String: AnyObject]()
private var ackHandlers = [SocketAckHandler]()
private var currentAck = -1
private var handlers = [SocketEventHandler]()
private var lastSocketMessage:SocketEvent?
private var paramConnect = false
private var pingTimer:NSTimer!
private var secure = false
var closed = false
@ -92,21 +94,41 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
// Connects to the server
func connect() {
self.connectWithURL(self.createConnectURL())
}
// Connect to the server using params
func connectWithParams(params:[String: AnyObject]) {
self.params = params
self.paramConnect = true
var endpoint = self.createConnectURL()
for (key, value) in params {
let keyEsc = key.stringByAddingPercentEncodingWithAllowedCharacters(
NSCharacterSet.URLHostAllowedCharacterSet())!
endpoint += "&\(keyEsc)="
if value is String {
let valueEsc = (value as! String).stringByAddingPercentEncodingWithAllowedCharacters(
NSCharacterSet.URLHostAllowedCharacterSet())!
endpoint += "\(valueEsc)"
} else {
endpoint += "\(value)"
}
}
self.connectWithURL(endpoint)
}
private func connectWithURL(url:String) {
if self.closed {
println("Warning: This socket was previvously closed. Reopening could be dangerous. Be careful.")
}
self.connecting = true
self.closed = false
var endpoint:String
if self.secure {
endpoint = "wss://\(self.socketURL)/socket.io/?transport=websocket"
} else {
endpoint = "ws://\(self.socketURL)/socket.io/?transport=websocket"
}
self.io = SRWebSocket(URL: NSURL(string: endpoint))
self.io = SRWebSocket(URL: NSURL(string: url))
self.io?.delegate = self
self.io?.open()
}
@ -120,6 +142,14 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
return mutData
}
private func createConnectURL() -> String {
if self.secure {
return "wss://\(self.socketURL)/socket.io/?transport=websocket"
} else {
return "ws://\(self.socketURL)/socket.io/?transport=websocket"
}
}
// Sends a message with multiple args
// If a message contains binary we have to send those
// seperately.
@ -286,7 +316,7 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
}
}
// Adds handler for single arg message
// Adds handler for an event
func on(name:String, callback:NormalCallback) {
let handler = SocketEventHandler(event: name, callback: callback)
self.handlers.append(handler)
@ -794,8 +824,13 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
self!.tryReconnect(triesLeft: triesLeft)
}
self.reconnecting = true
if self.paramConnect {
self.connectWithParams(self.params)
} else {
self.connect()
}
}
// Called when a message is recieved
func webSocket(webSocket:SRWebSocket!, didReceiveMessage message:AnyObject?) {