# CapabilitySocketIO SocketIO 能力层,提供 Socket.IO 实时通信能力。 ## 功能特性 - ✅ WebSocket 长连接 - ✅ 事件订阅和取消订阅 - ✅ 事件发送 - ✅ 自动重连(可选) - ✅ Token 认证 - ✅ 单例模式(全局共享连接) ## 依赖 - **BaseCore**: 基础核心模块(日志等) - **Socket.IO-Client-Swift**: Socket.IO 客户端库(16.0.0+) ## 使用方式 ### 1. 获取服务实例 ```swift import CapabilitySocketIO let socketService = SocketIOServiceFactory.getInstance() ``` ### 2. 连接服务器 ```swift socketService.connect(serverUrl: "http://server:9090", token: "your_jwt_token") ``` ### 3. 订阅事件 ```swift socketService.on(event: "vehicle_status") { response in print("接收到事件: \(response.event)") print("数据: \(response.data)") print("时间戳: \(response.timestamp)") // 解析 JSON 数据 if let jsonData = response.data.data(using: .utf8), let json = try? JSONSerialization.jsonObject(with: jsonData) as? [String: Any] { // 处理数据 } } ``` ### 4. 发送事件 ```swift let data: [String: Any] = [ "action": "unlock", "vehicleId": "12345" ] socketService.emit(event: "vehicle_control", data: data) ``` ### 5. 取消订阅事件 ```swift socketService.off(event: "vehicle_status") ``` ### 6. 断开连接 ```swift socketService.disconnect() ``` ### 7. 检查连接状态 ```swift if socketService.isConnected() { print("已连接") } else { print("未连接") } ``` ## 完整示例 ```swift import CapabilitySocketIO class VehicleController { private let socketService = SocketIOServiceFactory.getInstance() func startMonitoring() { // 连接服务器 socketService.connect(serverUrl: "http://api.example.com:9090", token: "your_token") // 订阅车辆状态事件 socketService.on(event: "vehicle_status") { [weak self] response in self?.handleVehicleStatus(response) } // 订阅车辆控制事件 socketService.on(event: "vehicle_control") { [weak self] response in self?.handleVehicleControl(response) } } func unlockVehicle(vehicleId: String) { let data: [String: Any] = [ "action": "unlock", "vehicleId": vehicleId ] socketService.emit(event: "vehicle_control", data: data) } private func handleVehicleStatus(_ response: SocketIOResponse) { // 处理车辆状态更新 } private func handleVehicleControl(_ response: SocketIOResponse) { // 处理车辆控制响应 } deinit { socketService.off(event: "vehicle_status") socketService.off(event: "vehicle_control") } } ``` ## 注意事项 1. **单例模式**: SocketIO 服务是单例,多个界面共享同一个连接 2. **Token 认证**: 连接时会自动在 HTTP Headers 和查询参数中添加 Token 3. **自动重连**: 默认禁用自动重连,需要手动处理重连逻辑 4. **线程安全**: 所有操作都是线程安全的 5. **事件监听器**: 在连接建立前注册的事件监听器会在连接成功后自动注册 ## 架构说明 - **SocketIOService**: 服务接口定义 - **SocketIOServiceImpl**: 服务实现类(单例) - **SocketIOServiceFactory**: 工厂类,提供统一的获取实例方式 - **SocketIOResponse**: 响应模型