start moving websocket stuff to socketengine
This commit is contained in:
parent
8bebc3c159
commit
5cc42be709
@ -56,16 +56,14 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func open(opts:[String: AnyObject]? = nil) {
|
func open(opts:[String: AnyObject]? = nil) {
|
||||||
var url:String
|
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 {
|
||||||
url = "\(self.client.socketURL)/socket.io/?transport="
|
|
||||||
urlPolling = "https://" + url + "polling"
|
urlPolling = "https://" + url + "polling"
|
||||||
urlWebSocket = "wss://" + url + "websocket"
|
urlWebSocket = "wss://" + url + "websocket"
|
||||||
} else {
|
} else {
|
||||||
url = "\(self.client.socketURL)/socket.io/?transport="
|
|
||||||
urlPolling = "http://" + url + "polling"
|
urlPolling = "http://" + url + "polling"
|
||||||
urlWebSocket = "ws://" + url + "websocket"
|
urlWebSocket = "ws://" + url + "websocket"
|
||||||
}
|
}
|
||||||
@ -109,12 +107,15 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
|
|||||||
// TODO add polling
|
// TODO add polling
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseWebSocketMessage(message:AnyObject?) {
|
func parseWebSocketMessage(var message:AnyObject?) {
|
||||||
if !(message is String) {
|
if let data = message as? NSData {
|
||||||
|
// Strip off message type
|
||||||
|
self.client.parseSocketMessage(data.subdataWithRange(NSMakeRange(1, data.length - 1)))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var strMessage = RegexMutable(message as String)
|
var message = message as String
|
||||||
|
var strMessage = RegexMutable(message)
|
||||||
|
|
||||||
// We should upgrade
|
// We should upgrade
|
||||||
if strMessage == "3probe" {
|
if strMessage == "3probe" {
|
||||||
@ -128,6 +129,9 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
|
|||||||
// TODO Handle other packets
|
// TODO Handle other packets
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message.removeAtIndex(message.startIndex)
|
||||||
|
self.client.parseSocketMessage(message)
|
||||||
}
|
}
|
||||||
|
|
||||||
func probeWebSocket() {
|
func probeWebSocket() {
|
||||||
|
|||||||
@ -506,7 +506,7 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Parses messages recieved
|
// Parses messages recieved
|
||||||
private func parseSocketMessage(message:AnyObject?) {
|
func parseSocketMessage(message:AnyObject?) {
|
||||||
if message == nil {
|
if message == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -515,41 +515,39 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
|
|||||||
|
|
||||||
if let stringMessage = message as? String {
|
if let stringMessage = message as? String {
|
||||||
// Check for successful namepsace connect
|
// Check for successful namepsace connect
|
||||||
|
|
||||||
|
if stringMessage == "0" {
|
||||||
|
// connected
|
||||||
|
self.closed = false
|
||||||
|
self.connecting = false
|
||||||
|
self.reconnecting = false
|
||||||
|
self.connected = true
|
||||||
|
|
||||||
if self.nsp != nil {
|
if self.nsp != nil {
|
||||||
if stringMessage == "40/\(self.nsp!)" {
|
// Join namespace
|
||||||
|
self.joinNamespace()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Don't handle as internal because something crazy could happen where
|
||||||
|
// we disconnect before it's handled
|
||||||
|
self.handleEvent("connect", data: nil)
|
||||||
|
}
|
||||||
|
if self.nsp != nil {
|
||||||
|
if stringMessage == "0/\(self.nsp!)" {
|
||||||
self.handleEvent("connect", data: nil)
|
self.handleEvent("connect", data: nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
Begin check for socket info frame
|
|
||||||
**/
|
|
||||||
var mutMessage = RegexMutable(stringMessage)
|
var mutMessage = RegexMutable(stringMessage)
|
||||||
var setup:String!
|
|
||||||
let messageData = mutMessage["(\\d*)(\\{.*\\})?"].groups()
|
|
||||||
|
|
||||||
if messageData != nil && messageData[1] == "0" {
|
|
||||||
setup = messageData[2]
|
|
||||||
let data = setup.dataUsingEncoding(NSUTF8StringEncoding)!
|
|
||||||
var jsonError:NSError?
|
|
||||||
|
|
||||||
if let json:AnyObject? = NSJSONSerialization.JSONObjectWithData(data,
|
|
||||||
options: nil, error: &jsonError) {
|
|
||||||
self.sid = json!["sid"] as? String
|
|
||||||
self.startPingTimer(interval: (json!["pingInterval"] as Int) / 1000)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
End check for socket info frame
|
|
||||||
**/
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Begin check for message
|
Begin check for message
|
||||||
**/
|
**/
|
||||||
let messageGroups = mutMessage["(\\d*)\\/?(\\w*)?,?(\\d*)?(\\[.*\\])?"].groups()
|
let messageGroups = mutMessage["(\\d*)\\/?(\\w*)?,?(\\d*)?(\\[.*\\])?"].groups()
|
||||||
|
|
||||||
if messageGroups[1].hasPrefix("42") {
|
if messageGroups[1].hasPrefix("2") {
|
||||||
var mesNum = messageGroups[1]
|
var mesNum = messageGroups[1]
|
||||||
var ackNum:String
|
var ackNum:String
|
||||||
var namespace:String?
|
var namespace:String?
|
||||||
@ -558,7 +556,7 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
|
|||||||
if messageGroups[3] != "" {
|
if messageGroups[3] != "" {
|
||||||
ackNum = messageGroups[3]
|
ackNum = messageGroups[3]
|
||||||
} else {
|
} else {
|
||||||
let range = Range<String.Index>(start: mesNum.startIndex, end: advance(mesNum.startIndex, 2))
|
let range = Range<String.Index>(start: mesNum.startIndex, end: advance(mesNum.startIndex, 1))
|
||||||
mesNum.replaceRange(range, with: "")
|
mesNum.replaceRange(range, with: "")
|
||||||
ackNum = mesNum
|
ackNum = mesNum
|
||||||
}
|
}
|
||||||
@ -581,6 +579,7 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
|
|||||||
data = messageInternals[2]
|
data = messageInternals[2]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
println(data)
|
||||||
// It would be nice if socket.io only allowed one thing
|
// It would be nice if socket.io only allowed one thing
|
||||||
// per message, but alas, it doesn't.
|
// per message, but alas, it doesn't.
|
||||||
if let parsed:AnyObject = SocketIOClient.parseData(data) {
|
if let parsed:AnyObject = SocketIOClient.parseData(data) {
|
||||||
@ -623,7 +622,7 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
|
|||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else if messageGroups[1].hasPrefix("43") {
|
} else if messageGroups[1].hasPrefix("3") {
|
||||||
let arr = Array(messageGroups[1])
|
let arr = Array(messageGroups[1])
|
||||||
var ackNum:String
|
var ackNum:String
|
||||||
let nsp = messageGroups[2]
|
let nsp = messageGroups[2]
|
||||||
@ -677,7 +676,7 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if binaryGroup[1].hasPrefix("45") {
|
if binaryGroup[1].hasPrefix("5") {
|
||||||
// println(binaryGroup)
|
// println(binaryGroup)
|
||||||
var ackNum:String
|
var ackNum:String
|
||||||
var event:String
|
var event:String
|
||||||
@ -718,9 +717,9 @@ class SocketIOClient: NSObject, SRWebSocketDelegate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.lastSocketMessage = mes
|
self.lastSocketMessage = mes
|
||||||
} else if binaryGroup[1].hasPrefix("46") {
|
} else if binaryGroup[1].hasPrefix("6") {
|
||||||
let messageType = RegexMutable(binaryGroup[1])
|
let messageType = RegexMutable(binaryGroup[1])
|
||||||
let numberOfPlaceholders = (messageType["46"] ~= "") as String
|
let numberOfPlaceholders = (messageType["6"] ~= "") as String
|
||||||
var ackNum:String
|
var ackNum:String
|
||||||
var nsp:String
|
var nsp:String
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user