non-namespace polling seems to work, needs more testing

This commit is contained in:
Erik 2015-03-04 20:22:39 -05:00
parent 346edc7b53
commit b295561dcc

View File

@ -167,6 +167,14 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
} }
} }
private func flushProbeWait() {
for waiter in self.probeWait {
waiter()
}
self.probeWait.removeAll(keepCapacity: false)
}
func open(opts:[String: AnyObject]? = nil) { func open(opts:[String: AnyObject]? = nil) {
let (urlPolling, urlWebSocket) = self.createURLs(params: opts) let (urlPolling, urlWebSocket) = self.createURLs(params: opts)
@ -360,7 +368,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
} }
} }
} else { } else {
self?.sendPollMessage(msg) self?.sendPollMessage(msg, datas: datas)
} }
} }
} }
@ -403,10 +411,10 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
} }
} }
func sendPollMessage(msg:AnyObject) { func sendPollMessage(msg:AnyObject, datas:[NSData]?) {
// println("Sending: \(msg)") // println("Sending: \(msg)")
var postData:NSData var postData:NSData
var bDatas:[String]?
let time = Int(NSDate().timeIntervalSince1970) let time = Int(NSDate().timeIntervalSince1970)
var req = NSMutableURLRequest(URL: var req = NSMutableURLRequest(URL:
NSURL(string:self.urlPolling! + "&t=\(time)&b64=1" + "&sid=\(self.sid)")!) NSURL(string:self.urlPolling! + "&t=\(time)&b64=1" + "&sid=\(self.sid)")!)
@ -414,25 +422,31 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
req.HTTPMethod = "POST" req.HTTPMethod = "POST"
req.setValue("application/html-text", forHTTPHeaderField: "Content-Type") req.setValue("application/html-text", forHTTPHeaderField: "Content-Type")
if msg is NSData { if datas != nil {
println("sending poll binary") bDatas = [String]()
let (nilData, data) = self.createBinaryDataForSend(msg as NSData) for data in datas! {
let (nilData, b64Data) = self.createBinaryDataForSend(data)
let dataLen = countElements(b64Data!)
let dataLen = countElements(data!) bDatas!.append("\(dataLen):\(b64Data!)")
postData = "\(dataLen):\(data!)".dataUsingEncoding(NSUTF8StringEncoding, }
allowLossyConversion: false)!
} else if !(msg is String) {
return
} else {
// println(msg)
let strMsg = "\(PacketType.MESSAGE.rawValue)\(msg as String)"
// println(strMsg)
let postCount = countElements(strMsg)
postData = ("\(postCount):\(strMsg)").dataUsingEncoding(NSUTF8StringEncoding,
allowLossyConversion: false)!
} }
let strMsg = "\(PacketType.MESSAGE.rawValue)\(msg as String)"
let postCount = countElements(strMsg)
var postStr = "\(postCount):\(strMsg)"
if bDatas != nil {
for data in bDatas! {
postStr += data
}
}
postData = postStr.dataUsingEncoding(NSUTF8StringEncoding,
allowLossyConversion: false)!
req.setValue(String(postData.length), forHTTPHeaderField: "Content-Length") req.setValue(String(postData.length), forHTTPHeaderField: "Content-Length")
req.HTTPBody = postData req.HTTPBody = postData
@ -463,11 +477,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
self._websocket = true self._websocket = true
self._polling = false self._polling = false
self.ws?.send(PacketType.UPGRADE.rawValue) self.ws?.send(PacketType.UPGRADE.rawValue)
for sender in self.probeWait { self.flushProbeWait()
sender()
}
self.probeWait.removeAll(keepCapacity: false)
} }
} }
@ -491,6 +501,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
self.probing = false self.probing = false
self._websocket = false self._websocket = false
self._polling = true self._polling = true
self.flushProbeWait()
self.client.webSocketDidCloseWithCode(code, reason: reason, wasClean: wasClean) self.client.webSocketDidCloseWithCode(code, reason: reason, wasClean: wasClean)
} }
@ -501,7 +512,8 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
self._websocket = false self._websocket = false
self._polling = true self._polling = true
self.probing = false self.probing = false
self.flushProbeWait()
self.client.webSocketDidFailWithError(error) // self.client.webSocketDidFailWithError(error)
} }
} }