2022cm网站最新地址你懂的

2022cm新地址 https://www.2022cma.com

这篇文章的内容其实很久之前就存在了,但是一直没发出来。有朋友了解这方面的使用,其实不难,或许复杂的是业务逻辑方面如何合理的处理。代码部分由 Swift 完成,建议大家可以多了解一下 Swift 强大的枚举,我个人感觉是 Swift 中最强大的技术特点之一了。

[objc] view plain copy
import SocketIO

// MARK: - SocketIO 连接处理部分
class SocketIOTool {
static let shared = SocketIOTool()
fileprivate var socketManager: SocketManager!

fileprivate let server = apiEnv.scheme + "://\(apiEnv.baseURL):8888"  

/// 连接成功执行回调  
typealias Completion = (() -> Void)  

private init () {  

}  

/// 开始连接服务器  
func startReceive(driverID: String, cookieKey: String, success: Completion?) {  
    // role - 1 乘客, 2 司机  
    let dict = ["user_id": driverID, "user_key": cookieKey, "platform": "ios", "role": "2"]  

    let manager = SocketManager(socketURL: URL(string: server)!, config: [.log(false), .compress])  
    let socket = manager.defaultSocket  
    socket.on(clientEvent: .connect) {data, ack in  
        Log(">>>>>>>>>>>> socket connected")  
        ack.with(["dachedriver-\(driverID)-received"]) // 应该是回应服务器握手  
        socket.emit("login", with: [dict]) // 向服务器发送事件  
        success?()  
    }  

    socket.on(clientEvent: .disconnect) { data, ack in  
        Log(">>>>>>>>>>>> socket disconnected")  
    }  

    // 监听所有事件  
    socket.onAny { event in  
        Log("收到服务器事件:", event.event, event.items)  
        if event.event == "error" {  
            //StatusMSG.show("Socket连接错误:\(event.items?.description ?? "")", duration: 3, type: .error)  
            Log("Socket连接错误:\(event.items?.description ?? "")")  
            return  
        }  
        // 取出事件内容json字符串,转换成字典  
        guard event.event == "new_msg", let jsonStr = event.items?.first as? String,  
            let data = jsonStr.data(using: .utf8),  
            let dict = (try? JSONSerialization.jsonObject(with: data, options: [])) as? [String: Any],  
            let code = dict["code"] as? Int else {  
            return  
        }  
        Log("事件code:", code)  
        Log("事件内容:", dict)  

        if let model = EventContent(code: code, dict: dict) {  
            // 发出通知给外界  
            NotificationCenter.default.post(name: DJNotification.socketEvent.name, object: model)  
        }  
    }  

    socket.connect()  
    self.socketManager = manager  
}  

/// 断开Socket服务器连接  
func stopReceive() {  
    socketManager.disconnect()  
}  

/// 断开再重连  
func reConnect() {  
    if socketManager.status == .disconnected || socketManager.status == .notConnected {  
        socketManager.reconnect()  
    }  
}  

}

猜你喜欢

转载自blog.51cto.com/13771765/2121402