wangmeng 6ab7c597b4 Initial commit: iOS项目 1 miesiąc temu
..
.swiftpm 6ab7c597b4 Initial commit: iOS项目 1 miesiąc temu
Sources 6ab7c597b4 Initial commit: iOS项目 1 miesiąc temu
Package.swift 6ab7c597b4 Initial commit: iOS项目 1 miesiąc temu
README.md 6ab7c597b4 Initial commit: iOS项目 1 miesiąc temu

README.md

CapabilitySocketIO

SocketIO 能力层,提供 Socket.IO 实时通信能力。

功能特性

  • ✅ WebSocket 长连接
  • ✅ 事件订阅和取消订阅
  • ✅ 事件发送
  • ✅ 自动重连(可选)
  • ✅ Token 认证
  • ✅ 单例模式(全局共享连接)

依赖

  • BaseCore: 基础核心模块(日志等)
  • Socket.IO-Client-Swift: Socket.IO 客户端库(16.0.0+)

使用方式

1. 获取服务实例

import CapabilitySocketIO

let socketService = SocketIOServiceFactory.getInstance()

2. 连接服务器

socketService.connect(serverUrl: "http://server:9090", token: "your_jwt_token")

3. 订阅事件

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. 发送事件

let data: [String: Any] = [
    "action": "unlock",
    "vehicleId": "12345"
]

socketService.emit(event: "vehicle_control", data: data)

5. 取消订阅事件

socketService.off(event: "vehicle_status")

6. 断开连接

socketService.disconnect()

7. 检查连接状态

if socketService.isConnected() {
    print("已连接")
} else {
    print("未连接")
}

完整示例

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: 响应模型