鸿蒙OS开发实战:【ArkTS 实现MQTT协议(2)】

电子说

1.3w人已加入

描述

软件说明

  1. 协议传输通道仅为TCPSocket
  2. 基于HarmonyOS SDK API 9开发
  3. 开发语言:ArkTS,TypeScript

应用操作说明

测试首页

  1. “连接” : 用于连接远端服务器。具备“连接 & 断开” 两个功能
  2. “设置” : 用于添加更多主题
  3. “订阅” & “解除” : 仅用于默认主题“Harvey2024”
  4. “发布” : 发布消息前,用来设置消息QoS 和 主题
  5. “发送” : 发布已输入的文字

HarmonyOS

主题设置页

  1. “+” : 添加主题

HarmonyOS

  1. 主题列表,长按可删除主题

HarmonyOS

运行中的首页

HarmonyOS

接口使用说明

学习前准备:

开始前熟悉鸿蒙文档

连接

//构建MQTT CONNECT参数
let CMD = MQTTConnect.create()
  .setClientIdentifier('Harvey鸿蒙') //客户端名字
  .buildPacket()

//配置Socket并且完成连接
HarmonyOSSocket.get()
  .socketCfg({
    address: {
      address: this.sec1IP + "." + this.sec2IP + "." + this.sec3IP + "." + this.sec4IP,
      port: 1883
    }
  },
  )
  .connectCfg(CMD)
  .connect()

订阅主题

let options: SubscribeTopicNameOptions[] = [
  { topicName: this.currentPublishTopicName} //主题名称
]

HarmonyOSSocket.get().subscribeTopic(options)

发布消息

//构建MQTT PUBLISH参数
let publishConfig = MQTTPublish.create()
  .setQoS(this.currentPublishQoS) 
  .setTopicName(this.currentPublishTopicName)

HarmonyOSSocket.get()
               .publishCfg(publishConfig)
               .sendMessageByString(this.inputMessage)

消息监听

//错误信息
getContext().eventHub.on(MQTTCommon.EVENTHUB_MQTT_APP_ERROR_MSG, (value) = > {
  this.errorMessage = value
})

//
getContext().eventHub.on(MQTTCommon.EVENTHUB_MQTT_CMD_STATUS_MSG, (msg) = > {
  if (msg.action === 'connect') { //MQTT CONNECT结果消息
    if (msg.value == 0) {
       //成功
    } else {
      Prompt.showToast({ message: '连接失败' })
    }

  } else if (msg.action === 'close') {
    //1. TCPSocket 关闭事件
    //2. MQTT 断开命令已发送完毕

  } else if (msg.action == 'subscribeack') {

    //订阅主题结果 
    let packet = msg.value as MQTTPacketStruct

  } else if (msg.action == 'unsubscribeack') {

    //解除主题订阅结果 
    let packet = msg.value as MQTTPacketStruct

  } else if (msg.action == 'publish-s-to-c') {

    //收到服务端数据包,即 接收到消息
    let packet = msg.value as MQTTPacketStruct

  } else if (msg.action == 'publish-c-to-s') {

    //客户端发送给服务端数据包
    let packet = msg.value as MQTTPacketStruct

  }
})

断开服务

HarmonyOSSocket.get().disconnect()

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分