#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. 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. 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. 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. 6. `socket.close()` - Closes the socket. Once a socket is closed it should not be reopened.
Events Events

View File

@ -32,10 +32,12 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
DISPATCH_QUEUE_SERIAL) DISPATCH_QUEUE_SERIAL)
let emitQueue = dispatch_queue_create("emitQueue".cStringUsingEncoding(NSUTF8StringEncoding), let emitQueue = dispatch_queue_create("emitQueue".cStringUsingEncoding(NSUTF8StringEncoding),
DISPATCH_QUEUE_SERIAL) DISPATCH_QUEUE_SERIAL)
private lazy var params:[String: AnyObject] = [String: AnyObject]()
private var ackHandlers = [SocketAckHandler]() private var ackHandlers = [SocketAckHandler]()
private var currentAck = -1 private var currentAck = -1
private var handlers = [SocketEventHandler]() private var handlers = [SocketEventHandler]()
private var lastSocketMessage:SocketEvent? private var lastSocketMessage:SocketEvent?
private var paramConnect = false
private var pingTimer:NSTimer! private var pingTimer:NSTimer!
private var secure = false private var secure = false
var closed = false var closed = false
@ -92,21 +94,41 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
// Connects to the server // Connects to the server
func connect() { 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 { if self.closed {
println("Warning: This socket was previvously closed. Reopening could be dangerous. Be careful.") println("Warning: This socket was previvously closed. Reopening could be dangerous. Be careful.")
} }
self.connecting = true self.connecting = true
self.closed = false self.closed = false
var endpoint:String
if self.secure { self.io = SRWebSocket(URL: NSURL(string: url))
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?.delegate = self self.io?.delegate = self
self.io?.open() self.io?.open()
} }
@ -120,6 +142,14 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
return mutData 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 // Sends a message with multiple args
// If a message contains binary we have to send those // If a message contains binary we have to send those
// seperately. // 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) { func on(name:String, callback:NormalCallback) {
let handler = SocketEventHandler(event: name, callback: callback) let handler = SocketEventHandler(event: name, callback: callback)
self.handlers.append(handler) self.handlers.append(handler)
@ -794,7 +824,12 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
self!.tryReconnect(triesLeft: triesLeft) self!.tryReconnect(triesLeft: triesLeft)
} }
self.reconnecting = true self.reconnecting = true
self.connect()
if self.paramConnect {
self.connectWithParams(self.params)
} else {
self.connect()
}
} }
// Called when a message is recieved // Called when a message is recieved