style
This commit is contained in:
parent
939273736c
commit
0fef6d88a1
@ -34,7 +34,7 @@ private class EventHandler: NSObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func executeCallback(args:AnyObject?) {
|
func executeCallback(args:AnyObject?) {
|
||||||
if (args != nil) {
|
if args != nil {
|
||||||
callback(data: args!)
|
callback(data: args!)
|
||||||
} else {
|
} else {
|
||||||
callback(data: nil)
|
callback(data: nil)
|
||||||
@ -57,8 +57,9 @@ private class Event {
|
|||||||
func createMessage() -> String {
|
func createMessage() -> String {
|
||||||
var array = "42["
|
var array = "42["
|
||||||
array += "\"" + event + "\""
|
array += "\"" + event + "\""
|
||||||
if (args? != nil) {
|
|
||||||
if (args is NSDictionary) {
|
if args? != nil {
|
||||||
|
if args is NSDictionary {
|
||||||
array += ","
|
array += ","
|
||||||
var jsonSendError:NSError?
|
var jsonSendError:NSError?
|
||||||
var jsonSend = NSJSONSerialization.dataWithJSONObject(args as NSDictionary,
|
var jsonSend = NSJSONSerialization.dataWithJSONObject(args as NSDictionary,
|
||||||
@ -77,8 +78,8 @@ private class Event {
|
|||||||
func createBinaryMessage() -> String {
|
func createBinaryMessage() -> String {
|
||||||
var array = "45\(self.placeholders)-["
|
var array = "45\(self.placeholders)-["
|
||||||
array += "\"" + event + "\""
|
array += "\"" + event + "\""
|
||||||
if (args? != nil) {
|
if args? != nil {
|
||||||
if (args is NSDictionary) {
|
if args is NSDictionary {
|
||||||
array += ","
|
array += ","
|
||||||
var jsonSendError:NSError?
|
var jsonSendError:NSError?
|
||||||
var jsonSend = NSJSONSerialization.dataWithJSONObject(args as NSDictionary,
|
var jsonSend = NSJSONSerialization.dataWithJSONObject(args as NSDictionary,
|
||||||
@ -96,14 +97,14 @@ private class Event {
|
|||||||
|
|
||||||
func fillInPlaceHolder(data:NSData) -> Bool {
|
func fillInPlaceHolder(data:NSData) -> Bool {
|
||||||
func checkDoEvent() -> Bool {
|
func checkDoEvent() -> Bool {
|
||||||
if (self.placeholders == self.currentPlace) {
|
if self.placeholders == self.currentPlace {
|
||||||
return true
|
return true
|
||||||
} else {
|
} else {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (checkDoEvent()) {
|
if checkDoEvent() {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,7 +138,7 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
|
|||||||
super.init()
|
super.init()
|
||||||
var mutURL = RegexMutable(socketURL)
|
var mutURL = RegexMutable(socketURL)
|
||||||
|
|
||||||
if (mutURL["https://"].matches().count != 0) {
|
if mutURL["https://"].matches().count != 0 {
|
||||||
self.secure = true
|
self.secure = true
|
||||||
} else {
|
} else {
|
||||||
self.secure = false
|
self.secure = false
|
||||||
@ -147,7 +148,7 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
|
|||||||
self.socketURL = mutURL
|
self.socketURL = mutURL
|
||||||
|
|
||||||
// Set options
|
// Set options
|
||||||
if (opts != nil) {
|
if opts != nil {
|
||||||
if let reconnects = opts!["reconnects"] as? Bool {
|
if let reconnects = opts!["reconnects"] as? Bool {
|
||||||
self.reconnnects = reconnects
|
self.reconnnects = reconnects
|
||||||
}
|
}
|
||||||
@ -175,11 +176,13 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
|
|||||||
func connect() {
|
func connect() {
|
||||||
self.connecting = true
|
self.connecting = true
|
||||||
var endpoint:String!
|
var endpoint:String!
|
||||||
if (self.secure!) {
|
|
||||||
|
if self.secure! {
|
||||||
endpoint = "wss://\(self.socketURL)/socket.io/?EIO=2&transport=websocket"
|
endpoint = "wss://\(self.socketURL)/socket.io/?EIO=2&transport=websocket"
|
||||||
} else {
|
} else {
|
||||||
endpoint = "ws://\(self.socketURL)/socket.io/?EIO=2&transport=websocket"
|
endpoint = "ws://\(self.socketURL)/socket.io/?EIO=2&transport=websocket"
|
||||||
}
|
}
|
||||||
|
|
||||||
self.io = SRWebSocket(URL: NSURL(string: endpoint))
|
self.io = SRWebSocket(URL: NSURL(string: endpoint))
|
||||||
self.io?.delegate = self
|
self.io?.delegate = self
|
||||||
self.io?.open()
|
self.io?.open()
|
||||||
@ -196,23 +199,26 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
|
|||||||
|
|
||||||
// Sends a message
|
// Sends a message
|
||||||
func emit(event:String, args:AnyObject? = nil) {
|
func emit(event:String, args:AnyObject? = nil) {
|
||||||
if (!self.connected) {
|
if !self.connected {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var frame:Event!
|
var frame:Event!
|
||||||
var str:String!
|
var str:String!
|
||||||
|
|
||||||
if let dict = args as? NSDictionary {
|
if let dict = args as? NSDictionary {
|
||||||
// Check for binary data
|
// Check for binary data
|
||||||
let (newDict, hadBinary, binaryDatas) = self.parseNSDictionary(dict: dict)
|
let (newDict, hadBinary, binaryDatas) = self.parseNSDictionary(dict: dict)
|
||||||
if (hadBinary) {
|
if hadBinary {
|
||||||
frame = Event(event: event, args: newDict, placeholders: binaryDatas!.count)
|
frame = Event(event: event, args: newDict, placeholders: binaryDatas!.count)
|
||||||
str = frame.createBinaryMessage()
|
str = frame.createBinaryMessage()
|
||||||
self.io?.send(str)
|
self.io?.send(str)
|
||||||
|
|
||||||
for data in binaryDatas! {
|
for data in binaryDatas! {
|
||||||
let sendData = self.createBinaryDataForSend(data)
|
let sendData = self.createBinaryDataForSend(data)
|
||||||
self.io?.send(sendData)
|
self.io?.send(sendData)
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else if let binaryData = args as? NSData {
|
} else if let binaryData = args as? NSData {
|
||||||
@ -222,6 +228,7 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
|
|||||||
self.io?.send(str)
|
self.io?.send(str)
|
||||||
let sendData = self.createBinaryDataForSend(binaryData)
|
let sendData = self.createBinaryDataForSend(binaryData)
|
||||||
self.io?.send(sendData)
|
self.io?.send(sendData)
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -237,11 +244,12 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
|
|||||||
// println("Should do event: \(event) with data: \(data)")
|
// println("Should do event: \(event) with data: \(data)")
|
||||||
// data = parseData(data as? String)
|
// data = parseData(data as? String)
|
||||||
for handler in self.handlers {
|
for handler in self.handlers {
|
||||||
if (handler.event == event) {
|
if handler.event == event {
|
||||||
if (data == nil) {
|
if data == nil {
|
||||||
handler.executeCallback(nil)
|
handler.executeCallback(nil)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
handler.executeCallback(data)
|
handler.executeCallback(data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -260,15 +268,16 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
|
|||||||
|
|
||||||
// Parses data for events
|
// Parses data for events
|
||||||
private func parseData(data:String?) -> AnyObject? {
|
private func parseData(data:String?) -> AnyObject? {
|
||||||
if (data == nil) {
|
if data == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
var err:NSError?
|
|
||||||
|
|
||||||
|
var err:NSError?
|
||||||
let stringData = data!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
|
let stringData = data!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
|
||||||
let parsed:AnyObject? = NSJSONSerialization.JSONObjectWithData(stringData!,
|
let parsed:AnyObject? = NSJSONSerialization.JSONObjectWithData(stringData!,
|
||||||
options: NSJSONReadingOptions.AllowFragments, error: &err)
|
options: NSJSONReadingOptions.AllowFragments, error: &err)
|
||||||
if (err != nil) {
|
|
||||||
|
if err != nil {
|
||||||
// println(err)
|
// println(err)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -292,7 +301,8 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
|
|||||||
returnDict[key as String] = value
|
returnDict[key as String] = value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (containedData) {
|
|
||||||
|
if containedData {
|
||||||
return (returnDict, true, returnDatas)
|
return (returnDict, true, returnDatas)
|
||||||
} else {
|
} else {
|
||||||
return (returnDict, false, nil)
|
return (returnDict, false, nil)
|
||||||
@ -301,7 +311,7 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
|
|||||||
|
|
||||||
// Parses messages recieved
|
// Parses messages recieved
|
||||||
private func parseSocketMessage(#message:AnyObject?) {
|
private func parseSocketMessage(#message:AnyObject?) {
|
||||||
if (message == nil) {
|
if message == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -314,10 +324,11 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
|
|||||||
var mutMessage = RegexMutable(stringMessage)
|
var mutMessage = RegexMutable(stringMessage)
|
||||||
var setup:String!
|
var setup:String!
|
||||||
let messageData = mutMessage["(\\d*)(\\{.*\\})?"].groups()
|
let messageData = mutMessage["(\\d*)(\\{.*\\})?"].groups()
|
||||||
if (messageData != nil && messageData[1] == "0") {
|
if messageData != nil && messageData[1] == "0" {
|
||||||
setup = messageData[2]
|
setup = messageData[2]
|
||||||
let data = setup.dataUsingEncoding(NSUTF8StringEncoding)!
|
let data = setup.dataUsingEncoding(NSUTF8StringEncoding)!
|
||||||
var jsonError:NSError?
|
var jsonError:NSError?
|
||||||
|
|
||||||
if let json:AnyObject? = NSJSONSerialization.JSONObjectWithData(data,
|
if let json:AnyObject? = NSJSONSerialization.JSONObjectWithData(data,
|
||||||
options: nil, error: &jsonError) {
|
options: nil, error: &jsonError) {
|
||||||
self.startPingTimer(interval: (json!["pingInterval"] as Int) / 1000)
|
self.startPingTimer(interval: (json!["pingInterval"] as Int) / 1000)
|
||||||
@ -332,13 +343,14 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
|
|||||||
Begin check for message
|
Begin check for message
|
||||||
**/
|
**/
|
||||||
let messageGroups = mutMessage["(\\d*)(\\[.*\\])?"].groups()
|
let messageGroups = mutMessage["(\\d*)(\\[.*\\])?"].groups()
|
||||||
if (messageGroups.count == 3 && messageGroups[1] == "42") {
|
if messageGroups.count == 3 && messageGroups[1] == "42" {
|
||||||
let messagePart = messageGroups[2]
|
let messagePart = messageGroups[2]
|
||||||
let messageInternals = RegexMutable(messagePart)["\\[\"(.*?)\",(.*?)?\\]$"].groups()
|
let messageInternals = RegexMutable(messagePart)["\\[\"(.*?)\",(.*?)?\\]$"].groups()
|
||||||
if (messageInternals != nil && messageInternals.count > 2) {
|
if messageInternals != nil && messageInternals.count > 2 {
|
||||||
let event = messageInternals[1]
|
let event = messageInternals[1]
|
||||||
var data:String?
|
var data:String?
|
||||||
if (messageInternals[2] == "") {
|
|
||||||
|
if messageInternals[2] == "" {
|
||||||
data = nil
|
data = nil
|
||||||
} else {
|
} else {
|
||||||
data = messageInternals[2]
|
data = messageInternals[2]
|
||||||
@ -371,12 +383,14 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
|
|||||||
func parseBinaryMessage(#message:AnyObject) {
|
func parseBinaryMessage(#message:AnyObject) {
|
||||||
if let stringMessage = message as? String {
|
if let stringMessage = message as? String {
|
||||||
var mutMessage = RegexMutable(stringMessage)
|
var mutMessage = RegexMutable(stringMessage)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Begin check for binary placeholder
|
Begin check for binary placeholder
|
||||||
**/
|
**/
|
||||||
let binaryGroup = mutMessage["(\\d*)-\\[\"(.*)\",(\\{.*\\})\\]$"].groups()
|
let binaryGroup = mutMessage["(\\d*)-\\[\"(.*)\",(\\{.*\\})\\]$"].groups()
|
||||||
|
|
||||||
// println(binaryGroup)
|
// println(binaryGroup)
|
||||||
if (binaryGroup != nil) {
|
if binaryGroup != nil {
|
||||||
let messageType = RegexMutable(binaryGroup[1])
|
let messageType = RegexMutable(binaryGroup[1])
|
||||||
let numberOfPlaceholders = messageType["45"] ~= ""
|
let numberOfPlaceholders = messageType["45"] ~= ""
|
||||||
let event = binaryGroup[2]
|
let event = binaryGroup[2]
|
||||||
@ -395,7 +409,7 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
|
|||||||
|
|
||||||
// Handles binary data
|
// Handles binary data
|
||||||
func parseBinaryData(data:NSData) {
|
func parseBinaryData(data:NSData) {
|
||||||
if (self.lastSocketMessage == nil) {
|
if self.lastSocketMessage == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -403,14 +417,14 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
|
|||||||
var event = self.lastSocketMessage!.event
|
var event = self.lastSocketMessage!.event
|
||||||
var args:AnyObject? = self.parseData(self.lastSocketMessage!.args as? String)
|
var args:AnyObject? = self.parseData(self.lastSocketMessage!.args as? String)
|
||||||
|
|
||||||
if (shouldExecute != nil && shouldExecute!) {
|
if shouldExecute != nil && shouldExecute! {
|
||||||
self.handleEvent(event: event, data: args)
|
self.handleEvent(event: event, data: args)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sends ping
|
// Sends ping
|
||||||
func sendPing() {
|
func sendPing() {
|
||||||
if (self.connected) {
|
if self.connected {
|
||||||
self.io?.send("2")
|
self.io?.send("2")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -423,13 +437,13 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
|
|||||||
|
|
||||||
// We lost connection and should attempt to reestablish
|
// We lost connection and should attempt to reestablish
|
||||||
private func tryReconnect(var #triesLeft:Int) {
|
private func tryReconnect(var #triesLeft:Int) {
|
||||||
if (triesLeft != -1 && triesLeft <= 0) {
|
if triesLeft != -1 && triesLeft <= 0 {
|
||||||
self.connecting = false
|
self.connecting = false
|
||||||
self.reconnnects = false
|
self.reconnnects = false
|
||||||
self.reconnecting = false
|
self.reconnecting = false
|
||||||
self.handleEvent(event: "disconnect", data: "Failed to reconnect")
|
self.handleEvent(event: "disconnect", data: "Failed to reconnect")
|
||||||
return
|
return
|
||||||
} else if (self.connected) {
|
} else if self.connected {
|
||||||
self.connecting = false
|
self.connecting = false
|
||||||
self.reconnecting = false
|
self.reconnecting = false
|
||||||
return
|
return
|
||||||
@ -443,11 +457,11 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
|
|||||||
|
|
||||||
// Wait reconnectWait seconds and then check if connected. Repeat if not
|
// Wait reconnectWait seconds and then check if connected. Repeat if not
|
||||||
dispatch_after(time, dispatch_get_main_queue()) {[weak self] in
|
dispatch_after(time, dispatch_get_main_queue()) {[weak self] in
|
||||||
if (self == nil || self!.connected) {
|
if self == nil || self!.connected {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if (triesLeft != -1) {
|
if triesLeft != -1 {
|
||||||
triesLeft = triesLeft - 1
|
triesLeft = triesLeft - 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -476,7 +490,7 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
|
|||||||
self.pingTimer?.invalidate()
|
self.pingTimer?.invalidate()
|
||||||
self.connected = false
|
self.connected = false
|
||||||
self.connecting = false
|
self.connecting = false
|
||||||
if (!self.reconnnects) {
|
if !self.reconnnects {
|
||||||
self.handleEvent(event: "disconnect", data: reason)
|
self.handleEvent(event: "disconnect", data: reason)
|
||||||
} else {
|
} else {
|
||||||
self.handleEvent(event: "reconnect", data: reason)
|
self.handleEvent(event: "reconnect", data: reason)
|
||||||
@ -489,9 +503,9 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
|
|||||||
self.pingTimer?.invalidate()
|
self.pingTimer?.invalidate()
|
||||||
self.connected = false
|
self.connected = false
|
||||||
self.connecting = false
|
self.connecting = false
|
||||||
if (!self.reconnnects) {
|
if !self.reconnnects {
|
||||||
self.handleEvent(event: "disconnect", data: error.localizedDescription)
|
self.handleEvent(event: "disconnect", data: error.localizedDescription)
|
||||||
} else if (!self.reconnecting) {
|
} else if !self.reconnecting {
|
||||||
self.handleEvent(event: "reconnect", data: error.localizedDescription)
|
self.handleEvent(event: "reconnect", data: error.localizedDescription)
|
||||||
self.tryReconnect(triesLeft: self.reconnectAttempts)
|
self.tryReconnect(triesLeft: self.reconnectAttempts)
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user