目錄
引言
mqtt4cj庫的使用
申請倉頡編程語言內測
下載STDX
測試程序
結束語
引言
最近一直在學習倉頡語言,由于我對物聯網比較感興趣,自然想到寫一個MQTT的程序,好在找到了mqtt4cj庫,今天分享一下學習心得。
mqtt4cj庫的使用
mqtt4cj庫使用倉頡語言編寫的MQTT協議處理庫。主要特性包括:
- 🚀 支持 tcp/tls/ws/wss 方式連接消息服務端
- 🚀 支持 mqttv3 協議連接消息服務端
- 🚀 支持 mqtt 主題訂閱發布
mqtt4cj是基于倉頡編程語言Canary Version SDK的,不能用現有的公開的倉頡SDK(0.5x版本)編譯。該版本點分式版本號為Cangjie 0.60.5
。這個版本增強了自定義注解能力,主要是支持聲明的范圍擴大,基于混合泛型恢復了反射能力,同時將擴展庫移到stdx,后續通過stdx庫提供能力。
申請倉頡編程語言內測
要使用Canary Version SDK,需要先訪問下面的地址申請內側版本:GitCode - 全球開發者的開源社區,開源代碼托管平臺??????
?申請后等幾天會收到郵件,表示內測通過了,就可以訪問內測版本SDK和STDX。
下載STDX
訪問STDX的網站:GitCode - 全球開發者的開源社區,開源代碼托管平臺,在其中的發行版那里下載并解壓軟件。
然后設置CANGJIE_STDX_PATH變量指向STDX的目錄。?
測試程序
我編寫了一個簡單的MQTT測試程序,用于訪問華為云的IoTDA,并發布一條狀態信息。
package iotdatest
import mqtt4cj.mqttv3.*main(): Int64 {let mqttClient: MqttClient = MqttClient("tcp://bde4cbe7aa.st1.iotda-device.cn-north-4.myhuaweicloud.com:1883", "<yourclientid>", MemoryPersistence())let mqttopt : MqttConnectOptions = MqttConnectOptions()mqttopt.setPassword("<yourpassword>".toRuneArray())mqttopt.setUserName("<yourusername>")let connectToken = mqttClient.connect(mqttopt)let data: String = """{"services": [{"service_id": "Ledlight","properties": {"LED": "ON"}}]}"""mqttClient.publish("$oc/devices/<deviceid>/sys/properties/report", data.toArray(), 0, false)sleep(Duration.second * 20)mqttClient.disconnect()mqttClient.close()return 0
}
在控制臺可以看到設備在線,并收到消息。
?
結束語
目前倉頡語言仍然在發展中,其生態還不太完善。像這個庫必須新版本,而目前公開的版本還用不了這個庫。希望倉頡團隊能盡快解決這個問題。