0

このチュートリアルに基づいて、iOS アプリと Socketio サーバー間のハンドシェイクを構築しようとしています: Teehan+Lax

私が抱えている問題は、接続が適切に開かれないことです。これは、ハンドシェイク + トークンが適切に生成されていないためだと思います。

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

誰にもアイデアはありますか?

4

1 に答える 1

0

以下の@influxdの提案に行き、 SIOSocket を使用することになりました。実際に私を助けてくれたのは、プロジェクトに 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)")
        }
    })
}
}
于 2015-01-28T21:39:44.217 に答える