2015-01-28 2 views
0

Я пытаюсь построить рукопожатие между приложением IOS и сервером Socketio Основе этого урока: Teehan+LaxSocketRocket + Socketio Неспособность построить Рукопожатие

Проблема у меня в том, что соединение не открыто правильно, я думаю, это потому, что Рукопожатие + маркер не генерируется правильно:

func initHandshake() { 
    let time:NSTimeInterval = NSDate().timeIntervalSince1970 * 1000 

    println(time) 

    var timeString = "\(time)" 

    var formattedTime = timeString.stringByReplacingOccurrencesOfString(".", withString: "-", options: NSStringCompareOptions.LiteralSearch) 

    println(formattedTime) 

    var endpoint = "http://\(server)/socket.io/1?t=\(formattedTime)" 

    println(endpoint) 

    var handshakeTask:NSURLSessionTask = session!.dataTaskWithURL(NSURL(fileURLWithPath: endpoint)!, completionHandler: { (data:NSData!, response:NSURLResponse!, error:NSError!) in 
     if !(error != nil) { 
      let stringData:NSString = NSString(data: data, encoding: NSUTF8StringEncoding)! 
      let handshakeToken:NSString = stringData.componentsSeparatedByString(":")[0] as NSString 
      println("HANDSHAKE \(handshakeToken)") 

      self.socketConnect(handshakeToken) 
     } 
     if ((error) != nil) { 
      println("Didn't connect. Why?") 
     } 
    }) 
    handshakeTask.resume() 
} 

Вы можете увидеть несколько попыток, которые я сделал в коде, чтобы соответствовать конечной точке URL со строкой, которая Socketio возвращается, но нет игральная кость. Он по-прежнему не подключается.

я не писал никакого Swift раньше, поэтому я довольно потерял о том, что этот код на самом деле пытается захватить:

var handshakeTask:NSURLSessionTask = session!.dataTaskWithURL(NSURL(fileURLWithPath: endpoint)!, completionHandler: { (data:NSData!, response:NSURLResponse!, error:NSError!) in 

Кто-нибудь есть какие-нибудь идеи?

+0

Я бы рекомендовал использовать библиотеку в вашем приложении IOS, которые будет абстрагироваться от деталей нижнего уровня соединения socket.io. Я использовал https://github.com/MegaBits/SIOSocket – influxd

+0

. Я рассмотрю это сейчас, @influxd, спасибо – Helen

ответ

0

Я закончил с предложением @ influxd ниже и с помощью SIOSocket. Что на самом деле в конечном итоге помогает мне был комментарий похоронил давно в вопросах here, чтобы начать писать код, как только я импортируемого SIOSocket в моем проекте:

import UIKit 

let host = "http://localhost:3000/" 

let username = "swiftbot" 

let message = "Hello World" 

class ViewController: UIViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.connectToHost() 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

private func connectToHost() { 
    SIOSocket.socketWithHost(host, reconnectAutomatically: true, attemptLimit: 0, withDelay: 1, maximumDelay: 5, timeout: 20, response: {socket in 
     socket.onConnect = { 
      println("Connected to \(host)") 
      socket.emit("add user", args: [username]) 
     } 
     socket.on("login", callback: {(AnyObject data) -> Void in 
      println(["login": data]) 
      socket.emit("new message", args: [message]) 
     }) 
     socket.onDisconnect = { 
      println("Disconnected from \(host)") 
     } 
    }) 
} 
} 
Смежные вопросы