Swift Long Polling
Я пытаюсь подключиться к URL-адресу, а затем получать от него обновления, поскольку он постоянно возвращает новые данные в метод, называемый HTTP Long Polling. Я нашел этот пример HTTP Long Polling в Swift, но он просто не работает. Данные возвращаются один раз, но затем не возвращаются непрерывно, и это работает в CURL. Вот мой код:
public class LongPollingRequest: NSObject {
var GlobalUserInitiatedQueue: dispatch_queue_t {
return dispatch_get_global_queue(Int(QOS_CLASS_USER_INITIATED.rawValue), 0)
}
var GlobalBackgroundQueue: dispatch_queue_t {
return dispatch_get_global_queue(Int(QOS_CLASS_BACKGROUND.rawValue), 0)
}
weak var longPollDelegate: LongPollingDelegate?
var request: NSMutableURLRequest?
init(delegate:LongPollingDelegate){
longPollDelegate = delegate
}
public func poll(username: String!, token: String!, vehicleID: String!){
let loginString = NSString(format: "%@:%@", username, token)
let loginData: NSData = loginString.dataUsingEncoding(NSUTF8StringEncoding)!
let base64LoginString = loginData.base64EncodedStringWithOptions([])
// create the request
let url = NSURL(string:"https://streaming.vn.teslamotors.com/stream/\(vehicleID)/?values=speed,odometer,soc,elevation,est_heading,est_lat,est_lng,power,shift_state")!
request = NSMutableURLRequest(URL: url)
request!.HTTPMethod = "GET"
request!.setValue("text/json", forHTTPHeaderField: "content-type")
request!.setValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization")
poll()
}
private func poll(){
dispatch_async(GlobalBackgroundQueue) {
self.longPoll()
}
}
private func longPoll() -> Void{
autoreleasepool{
do{
print("starting request: \(request?.HTTPBody)")
let urlSession = NSURLSession.sharedSession()
let dataTask = urlSession.dataTaskWithRequest(self.request!, completionHandler: {
(data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in
if( error == nil ) {
self.longPollDelegate?.dataRecieved(data)
self.poll()
} else {
self.longPollDelegate?.errorRecieved(error)
}
})
dataTask.resume()
}
}
}