简体   繁体   English

Swift / iOS8:为websocket SocketIOCocoa创建共享实例

[英]Swift/iOS8: Create shared instance for websocket SocketIOCocoa

I am trying to create a shared Instance for a websocket client, using the SocketIOCocoa library found here: https://github.com/shuoli84/SocketIOCocoa 我正在尝试使用在此处找到的SocketIOCocoa库为websocket客户端创建共享实例: https//github.com/shuoli84/SocketIOCocoa

The library works perfectly fine, when used inside a ViewController to create a new instance of the websocket client - but i somehow fail to set up a shared instance. 当在ViewController中使用该库来创建websocket客户端的新实例时,该库的工作原理非常好-但我以某种方式无法设置共享实例。 What I tried: 我试过的

import Foundation
import Alamofire

public class WebSocketClient:SocketIOSocket {


    public var WebSocket:SocketIOClient!

    func myWebSocketClient() -> SocketIOClient {

        if WebSocket != nil {
            return WebSocket
        } else {
        let uri = "\(CurrentConfiguration.serverURL)/socket.io/"

        var client = SocketIOClient(uri: uri, reconnect: true, timeout:3000)
        client.open()

        return client
        }
    }

As I am quite new to the use of protocols/shared instances I dont know if I am on the right track. 由于我对协议/共享实例的使用还很陌生,所以我不知道自己是否走对了。 At least it doesnt work when I want to use it as: var foo = WebSocketClient.myWebSocketclient() 至少当我要使用它作为它时,它不起作用:var foo = WebSocketClient.myWebSocketclient()

This is how I would do it in a single VC: 这就是我在单个VC中的方法:

func newSocket() {

let uri = "\(CurrentConfiguration.serverURL)/socket.io/"

var client = SocketIOClient(uri: uri, reconnect: true, timeout:3000)
client.open()

var socket = client.socket("myNamespace") //join namespace


socket.event("customEvent", data: websocketRoomData){ (packet) -> Void in
                    }//emit event after join

socket.delegate = self
}


func socketOnEvent(socket: SocketIOSocket, event: String, data: AnyObject?) {

        switch event {
        case "returning from server event":
            println(event)
            let returnData = data as? NSArray

            //do stuff with return data

            doStuff(returnData!)

        default:
            println("Error: unrecognized Websockets Event received!")
    }
}

For example. 例如。 You can use SocketSingleton.call from any place in your code. 您可以在代码的任何位置使用SocketSingleton.call。

let socket: SocketSingleton = SocketSingleton.call 让套接字:SocketSingleton = SocketSingleton.call

socket.socketEmit() socket.socketEmit()

class SocketSingleton: NSObject {

static let call = SocketSingleton()

let socket = SocketIOClient(socketURL: NSURL(string:"url")!)

override init() {
    super.init()
    addHandlers()
    socket.connect()
}

func addHandlers() {
    socket.on("message") { data, ack in

    }

    socket.on("reconnect") { data, ack in

    }

    socket.on("error") { data, ack in

    }

}
func socketEmit() {
    let msg = [:]
    var sendJson : NSString = ""
    do {
        let json = try NSJSONSerialization.dataWithJSONObject(msg, options: NSJSONWritingOptions.PrettyPrinted)
        let string = NSString(data: json, encoding: NSUTF8StringEncoding)
        sendJson = string! as NSString
    } catch let error as NSError {
        print(error.description)
    }

    socket.emit("message", sendJson)
}

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM