[在iOS中使用mosquitto api的Swift MQTT协议实现

问题描述 投票:0回答:1

我正在尝试使用mosquitto api实现MQTT协议以进行实时位置更新已经设置好本地服务器,并在终端消息中发送和接收良好,但在我的项目中不发送。这是我的代码。我正在简短分享终端屏幕。

enter image description here

enter code here导入UIKit进口CocoaMQTT

func mqttSetUp()
{
    let clientID = "mosq-irTRTw6KH28CzBbUPC" //+ "tutzqscv"//String(ProcessInfo().processIdentifier)
    let mqtt = CocoaMQTT(clientID: clientID, host: "/usr/local/etc/mosquitto/mosquitto.conf", port: 1883)
    mqtt.username = "p2"
    mqtt.password = "c1"
    mqtt.willMessage = CocoaMQTTWill(topic: "/will", message: "dieout")
    mqtt.keepAlive = 60
    mqtt.delegate = self
    mqtt.disconnect()
    mqtt.connect()
}

func TRACE(_ message: String = "", fun: String = #function) {
    let names = fun.components(separatedBy: ":")
    var prettyName: String
    if names.count == 2 {
        prettyName = names[0]
    } else {
        prettyName = names[1]
    }

    if fun == "mqttDidDisconnect(_:withError:)" {
        prettyName = "didDisconect"
    }
    print("[TRACE] [\(prettyName)]: \(message)")
}

}扩展ViewController:CocoaMQTTDelegate{func mqtt(_ mqtt:CocoaMQTT,didUnsubscribeTopic主题:字符串){打印(“ topic ==>(topic)”)}

// Optional ssl CocoaMQTTDelegate
func mqtt(_ mqtt: CocoaMQTT, didReceive trust: SecTrust, completionHandler: @escaping (Bool) -> Void) {
    TRACE("trust: \(trust)")

    completionHandler(true)
}

func mqtt(_ mqtt: CocoaMQTT, didConnectAck ack: CocoaMQTTConnAck) {
    TRACE("ack: \(ack)")

    if ack == .accept {
        mqtt.subscribe("chat/room/animals/client/+", qos: CocoaMQTTQOS.qos1)
    }
}

func mqtt(_ mqtt: CocoaMQTT, didStateChangeTo state: CocoaMQTTConnState) {
    TRACE("new state: \(state)")
}

func mqtt(_ mqtt: CocoaMQTT, didPublishMessage message: CocoaMQTTMessage, id: UInt16) {
    TRACE("message: \(message.string!.description), id: \(id)")
}

func mqtt(_ mqtt: CocoaMQTT, didPublishAck id: UInt16) {
    TRACE("id: \(id)")
}

func mqtt(_ mqtt: CocoaMQTT, didReceiveMessage message: CocoaMQTTMessage, id: UInt16 ) {
    TRACE("message: \(message.string!.description), id: \(id)")

    let name = NSNotification.Name(rawValue: "MQTTMessageNotification")
    NotificationCenter.default.post(name: name, object: self, userInfo: ["message": message.string!, "topic": message.topic])
}

func mqtt(_ mqtt: CocoaMQTT, didSubscribeTopics success: NSDictionary, failed: [String]) {
    TRACE("subscribed: \(success), failed: \(failed)")
}

func mqtt(_ mqtt: CocoaMQTT, didSubscribeTopic topics: [String]) {
    TRACE("topic: \(topics)")
}

func mqttDidPing(_ mqtt: CocoaMQTT) {
    TRACE()
}

func mqttDidReceivePong(_ mqtt: CocoaMQTT) {
    TRACE()
}

func mqttDidDisconnect(_ mqtt: CocoaMQTT, withError err: Error?) {
    TRACE("\(err.debugDescription)")
}

}

ios swift mqtt mosquitto
1个回答
0
投票
请为在MQTT中传递而创建dicPayload

func publishMQTTMessage() { var dicPayload = [String : Any]() dicPayload["sender_id"] = <Pass Sender Id> dicPayload["recv_id"] = <Pass reciver Id> dicPayload["message"] = <message> dicPayload["chat_type"] = <userChatType> dicPayload["message_type"] = <messageType> MQTT.shared.MQTTPublishWithTopic(dicPayload, appDelegate.loginUser.userId, CMQTTUSERTOPIC) }

发布带有MQTT主题的消息

func MQTTPublishWithTopic(_ payload:[String : Any], _ id:Any?, _ topic : String?) { let jsonData = try? JSONSerialization.data(withJSONObject: payload, options: []) let jsonString = String(data: jsonData!, encoding: .utf8) objMQTTClient?.publish(topic!, withString: jsonString!) print("message publish") }

© www.soinside.com 2019 - 2024. All rights reserved.