既然写完了WebSocket,那也就顺便把Socket.IO一起写了。
这里也涉及一个三方库
Socket.IO-Client-Swift
OC也有一个库,但是吧,比较古老。建议还是用 ↑
SIOSocket
由于OC那个太古老了,所以我就直接使用了swift (我的项目是混编的,原因是有个核心的三方库目前只有swift在迭代了,OC已经停更了,有时间我会写一篇关于那个地图SDK的文章)
不废话了,直接上代码
import UIKit
import SocketIO
@objc protocol ARCGSocketDelegate :NSObjectProtocol {
// 连接成功
func ARCGSocketDidConnect()
// 断开
func ARCGSocketDidDisconnect()
// 收到消息
func ARCGSocketDidReceiveMessage(_ message: String)
}
@objcMembers class ARCGSocketIO: NSObject {
public var delegate: ARCGSocketDelegate?
private var manager: SocketManager
private var socket: SocketIOClient
override init() {
let userToken = ToolManager.aq_GetToken()
manager = SocketManager(socketURL: URL(string: "wss://xxxxx")!,
config: [.log(true), .compress])
socket = manager.defaultSocket
super.init()
}
@objc func connect() {
socket.on(clientEvent: .connect) { [weak self] _, _ in
self?.delegate?.ARCGSocketDidConnect()
}
socket.on(clientEvent: .disconnect) { [weak self] _, _ in
self?.delegate?.ARCGSocketDidDisconnect()
}
socket.on("new message") { [weak self] data, _ in
if let msg = data[0] as? String {
self?.delegate?.ARCGSocketDidReceiveMessage(msg)
}
}
socket.on(clientEvent: .error) {data, ack in
print("Socket Error:")
}
socket.connect()
}
@objc func disconnect() {
socket.disconnect()
}
@objc func sendMessage(_ msg: String) {
socket.emit("chat message", msg)
}
}