engine polling to nsurl

This commit is contained in:
Erik 2016-01-25 16:21:52 -05:00
parent d912796fa5
commit b67b6abbdf
3 changed files with 26 additions and 37 deletions

View File

@ -47,7 +47,7 @@ public final class SocketEngine: NSObject, SocketEnginePollable, SocketEngineWeb
public private(set) var session: NSURLSession? public private(set) var session: NSURLSession?
public private(set) var sid = "" public private(set) var sid = ""
public private(set) var socketPath = "/engine.io/" public private(set) var socketPath = "/engine.io/"
public private(set) var urlPolling = "" public private(set) var urlPolling = NSURL()
public private(set) var urlWebSocket = NSURL() public private(set) var urlWebSocket = NSURL()
public private(set) var websocket = false public private(set) var websocket = false
public private(set) var ws: WebSocket? public private(set) var ws: WebSocket?
@ -199,56 +199,38 @@ public final class SocketEngine: NSObject, SocketEnginePollable, SocketEngineWeb
} }
} }
private func createURLs(params: [String: AnyObject]?) -> (String, NSURL) { private func createURLs(params: [String: AnyObject]?) -> (NSURL, NSURL) {
if client == nil { if client == nil {
return ("", NSURL()) return (NSURL(), NSURL())
} }
let absURL = url.absoluteString["https?://"] <~ "" let urlPolling = NSURLComponents(string: url.absoluteString)!
let baseURL: String
if absURL.hasSuffix("/") {
baseURL = String(absURL.characters.dropLast())
} else {
baseURL = absURL
}
let socketURL = "\(baseURL)\(socketPath)/?transport="
var urlPolling: String
var queryString = "transport=websocket"
let urlWebSocket = NSURLComponents(string: url.absoluteString)! let urlWebSocket = NSURLComponents(string: url.absoluteString)!
var queryString = ""
urlWebSocket.path = socketPath urlWebSocket.path = socketPath
urlPolling.path = socketPath
urlWebSocket.query = "transport=websocket"
urlPolling.query = "transport=polling&b64=1"
if secure { if secure {
urlPolling = "https://" + socketURL + "polling" urlPolling.scheme = "https"
urlWebSocket.scheme = "wss" urlWebSocket.scheme = "wss"
} else { } else {
urlPolling = "http://" + socketURL + "polling" urlPolling.scheme = "http"
urlWebSocket.scheme = "ws" urlWebSocket.scheme = "ws"
} }
if params != nil { if params != nil {
for (key, value) in params! { for (key, value) in params! {
let keyEsc = key.stringByAddingPercentEncodingWithAllowedCharacters( queryString += "&\(key)=\(value)"
allowedCharacterSet)!
urlPolling += "&\(keyEsc)="
queryString += "&\(keyEsc)="
if value is String {
let valueEsc = (value as! String).stringByAddingPercentEncodingWithAllowedCharacters(
allowedCharacterSet)!
urlPolling += String(valueEsc)
queryString += String(value)
} else {
urlPolling += String(value)
queryString += String(value)
}
} }
} }
urlWebSocket.query = queryString urlWebSocket.query = urlWebSocket.query! + queryString
return (urlPolling, urlWebSocket.URL!) urlPolling.query = urlPolling.query! + queryString
return (urlPolling.URL!, urlWebSocket.URL!)
} }
private func createWebsocketAndConnect() { private func createWebsocketAndConnect() {
@ -411,7 +393,7 @@ public final class SocketEngine: NSObject, SocketEnginePollable, SocketEngineWeb
return return
} }
let reqPolling = NSMutableURLRequest(URL: NSURL(string: urlPolling + "&b64=1")!) let reqPolling = NSMutableURLRequest(URL: urlPolling)
if cookies != nil { if cookies != nil {
let headers = NSHTTPCookie.requestHeaderFieldsWithCookies(cookies!) let headers = NSHTTPCookie.requestHeaderFieldsWithCookies(cookies!)

View File

@ -71,7 +71,7 @@ extension SocketEnginePollable {
postWait.removeAll(keepCapacity: false) postWait.removeAll(keepCapacity: false)
let req = NSMutableURLRequest(URL: NSURL(string: urlPolling + "&sid=\(sid)")!) let req = NSMutableURLRequest(URL: urlPollingWithSid)
addHeaders(req) addHeaders(req)
@ -93,7 +93,7 @@ extension SocketEnginePollable {
} }
waitingForPoll = true waitingForPoll = true
let req = NSMutableURLRequest(URL: NSURL(string: urlPolling + "&sid=\(sid)&b64=1")!) let req = NSMutableURLRequest(URL: urlPollingWithSid)
addHeaders(req) addHeaders(req)
doLongPoll(req) doLongPoll(req)

View File

@ -42,7 +42,7 @@ import Foundation
var handleQueue: dispatch_queue_t! { get } var handleQueue: dispatch_queue_t! { get }
var sid: String { get } var sid: String { get }
var socketPath: String { get } var socketPath: String { get }
var urlPolling: String { get } var urlPolling: NSURL { get }
var urlWebSocket: NSURL { get } var urlWebSocket: NSURL { get }
var websocket: Bool { get } var websocket: Bool { get }
@ -59,6 +59,13 @@ import Foundation
} }
extension SocketEngineSpec { extension SocketEngineSpec {
var urlPollingWithSid: NSURL {
let com = NSURLComponents(URL: urlPolling, resolvingAgainstBaseURL: false)!
com.query = com.query! + "&sid=\(sid)"
return com.URL!
}
func createBinaryDataForSend(data: NSData) -> Either<NSData, String> { func createBinaryDataForSend(data: NSData) -> Either<NSData, String> {
if websocket { if websocket {
var byteArray = [UInt8](count: 1, repeatedValue: 0x4) var byteArray = [UInt8](count: 1, repeatedValue: 0x4)