swiftUI 配置 CocoaMQTT v2.1.7

CocoaMQTT项目地址

配置代码

host、port、username、password改成你自己的配置;CocoaMQTT Delegate 代理部分需要使用对应版本的Delegate(要修改)
注:host为主机名,不是Url;若你的MQTT服务器的Broker为 tcp://xxx.xxx,host应为xxx.xxx而不是tcp://xxx.xxx

import CocoaMQTT
import Foundation

class MQTTManager: CocoaMQTTDelegate {
    var mqtt: CocoaMQTT!

    // 初始化
    init() {
        // 每台设备clientID需为全局唯一,否则会被挤下去
        let clientID = "CocoaMQTT-" + String(ProcessInfo().processIdentifier)
        // 初始化CocoaMQTT实例
        mqtt = CocoaMQTT(clientID: clientID, host: "broker.emqx.io", port: 1883)
        // 设置代理
        mqtt.delegate = self
        // 账号
        mqtt.username = "test"
        // 密码
        mqtt.password = "public"
        // 保持活动时间间隔
        self.mqtt.keepAlive = 30
        // 清除会话
        self.mqtt.cleanSession = true
        // App端遗嘱消息
        mqtt.willMessage = CocoaMQTTMessage(topic: "/will", string: "dieout")
        // 连接
        connect()
    }

    // 连接
    func connect() {
        mqtt.connect()
    }

    // 断开连接
    func disconnect() {
        mqtt.disconnect()
    }
    
    // 重连
    func reconnect() {
        print("Attempting to reconnect...")
        DispatchQueue.global().asyncAfter(deadline: .now() + 2) {
            self.connect()
        }
    }

    
    /* CocoaMQTT Delegate 代理(要修改) */
    ///
    func mqtt(_ mqtt: CocoaMQTT, didConnectAck ack: CocoaMQTTConnAck) {
        if ack == .accept {
            print("Connected successfully!")
            //订阅topic1
            mqtt.subscribe("topic1", qos: CocoaMQTTQoS.qos0)
            // 发布topic2,话题为message2
            mqtt.publish("topic2", withString: message2)
        }
    }

    ///
    func mqtt(_ mqtt: CocoaMQTT, didPublishMessage message: CocoaMQTTMessage, id: UInt16) {
    // 是否成功发布
        print("publish topic: \(message.topic)")
    }
    
    ///
    func mqtt(_ mqtt: CocoaMQTT, didPublishAck id: UInt16) {
        
    }
    
    ///
    func mqtt(_ mqtt: CocoaMQTT, didReceiveMessage message: CocoaMQTTMessage, id: UInt16 ) {
        // 处理订阅到的消息
        if message.topic == "topic1" {
        	// 详细的处理方法
        }
    }
    
    ///
    func mqtt(_ mqtt: CocoaMQTT, didSubscribeTopics success: NSDictionary, failed: [String]) {
        // 是否订阅成功
        print("Subscribed: \(success)")
    }
    
    ///
    func mqtt(_ mqtt: CocoaMQTT, didUnsubscribeTopics topics: [String]) {
        
    }
    
    ///
    func mqttDidPing(_ mqtt: CocoaMQTT) {
        
    }
    
    ///
    func mqttDidReceivePong(_ mqtt: CocoaMQTT) {
        
    }
    
    ///
    func mqttDidDisconnect(_ mqtt: CocoaMQTT, withError err: Error?) {
        
    }
    
    /// Manually validate SSL/TLS server certificate.
    ///
    /// This method will be called if enable  `allowUntrustCACertificate`
    @objc func mqtt(_ mqtt: CocoaMQTT, didReceive trust: SecTrust, completionHandler: @escaping (Bool) -> Void) {
        
    }

    @objc func mqttUrlSession(_ mqtt: CocoaMQTT, didReceiveTrust trust: SecTrust, didReceiveChallenge challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
        
    }

    ///
    @objc func mqtt(_ mqtt: CocoaMQTT, didPublishComplete id: UInt16) {
        
    }
    
    ///
    @objc func mqtt(_ mqtt: CocoaMQTT, didStateChangeTo state: CocoaMQTTConnState) {
        
    }
    
    
}

修改 CocoaMQTT Delegate 代理

修改上述配置代码中的 CocoaMQTT Delegate 代理
按住 command 键点击 CocoaMQTTDelegate 跳转到 CocoaMQTTDelegate 定义

在这里插入图片描述
配置里的CocoaMQTT Delegate 代理要与CocoaMQTTDelegate定义相对应

使用

let mqttManager = MQTTManager()
mqttManager.connect()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值