智汀家庭云-iOS端:WebSocket模块

1.WebSocket封装介绍项目中的使用的WebSocket是基于开源第三方库Starscream的再次封装,涉及到的类有三个,分别是:ZTWebSocketOperation:对WebSocket发送命令数据的封装,具体命令请看ZTWebsocket类的介绍; ZTWebSocketResponse:对WebSocket响应数据的封装,对WebSocket发出指令后接受到的响应使用对应的model解析; ZTWebsocket:WebSocket命令操作类;(1)ZTWebSocketOp
摘要由CSDN通过智能技术生成

1.WebSocket封装介绍

项目中的使用的WebSocket是基于开源第三方库Starscream的再次封装,涉及到的类有三个,分别是:

  • ZTWebSocketOperation:对WebSocket发送命令数据的封装,具体命令请看ZTWebsocket类的介绍;
  • ZTWebSocketResponse:对WebSocket响应数据的封装,对WebSocket发出指令后接受到的响应使用对应的model解析;
  • ZTWebsocket:WebSocket命令操作类;

(1)ZTWebSocketOperation

class Operation: BaseModel {
    var domain = ""
    var id = 0
    var service = ""
    var identity: String?
    var service_data: ServiceData?

    init(domain: String, id: Int, service: String) {
        self.domain = domain
        self.id = id
        self.service = service
    }a
    
    required init() {
        fatalError("init() has not been implemented")
    }
    
}

extension Operation {
    class ServiceData: BaseModel {
        var plugin_id: String?
        var attributes: [DeviceAttribute]?
    }
}

(2)ZTWebSocketResponse

// MARK: - WSOperationResponse
class WSOperationResponse<T: HandyJSON>: HandyJSON {
    var id = 0
    var success = false
    var type = ""
    var result: T?
    
    required init() {}
}

class EmptyResultResponse: HandyJSON {
    required init() {}
}

class SearchDeviceResponse: HandyJSON {
    var device = DiscoverDeviceModel()
    required init() {}
}

class DeviceStatusResponse: BaseModel {
    
    var device = DeviceStatusModel()

    
    class DeviceStatusModel: BaseModel {
        var identity = ""
        var type = ""
        var instances = [DeviceInstance]()
    }

}

class DeviceInstance: HandyJSON {
    var type = ""
    var instance_id = 0
    var attributes = [DeviceAttribute]()
    
    
    required init() {}
}

// MARK: - WSEventResponse
class WSEventResponse<T: HandyJSON>: HandyJSON {
    var event_type = ""
    var data: T?
    var origin = ""
    
    required init() {}
}

class DeviceStateChangeResponse: BaseModel {
    var identity = ""
    var instance_id = 0
    var attr = DeviceAttribute()
}

(3)ZTWebSocket

//
//  ZTWebSocket.swift
//  ZhiTing
//
//  Created by iMac on 2021/2/3.
//

import UIKit
import Starscream
import Combine


/// Websocket connect status
enum WebsocketConnectStatus {
    case connected
    case disconnected
}

class ZTWebSocket {
    /// websocket
    private var socket: WebSocket!
    /// connectStatus
    var status: WebsocketConnectStatus = .disconnected
    /// autoInrecement id (use for record operations)
    lazy var id = 0
    /// id: (Operation, OperationType)
    lazy var operationDict = [Int: (op: Operation, opType: OperationType)]()
    /// 重连次数
    lazy var reconnectCount = 0
    /// 最大重连次数
    let maxReconnectCount = 6
    /// 是否打印日志
    var printDebugInfo = true
    
    /// publishers
    /// Socket连接成功publisher
    lazy var socketDidConnectedPublisher = PassthroughSubject<Void, Never>()
    /// SA发现设备publisher
    lazy var discoverDevicePublisher = PassthroughSubject<DiscoverDeviceModel, Never>()
    /// 设备状态publisher
    lazy var deviceStatusPublisher = PassthroughSubject<DeviceStatusResponse, Never>()
    /// 设备状态改变publisher
    lazy var deviceStatusChangedPublisher = PassthroughSubject<DeviceStateChangeResponse, Never>()
    /// 插件安装回调publisher
    lazy var installPluginPublisher = PassthroughSubject<(plugin_id: String, success: Bool), Never>()
    /// 设备开关操作成功 publisher
    lazy var devicePowerPublisher = PassthroughSubject<(power: Bool, identity: String), Never>()

    init(urlString: String 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值