当前位置: 首页 > news >正文

谷城网站快速排名百度网站排名优化软件

谷城网站快速排名,百度网站排名优化软件,建设局网站瓯龙建州府3号楼,高大上设计网站欣赏使用一个开源库:hivemq-mqtt-client,这是Java生态的一个MQTT客户端框架,需要Java 8,Android上使用的话问题不大,需要一些额外的配置,下面列出了相关的配置,尤其是 packagingOptions,…

使用一个开源库:hivemq-mqtt-client,这是Java生态的一个MQTT客户端框架,需要Java 8,Android上使用的话问题不大,需要一些额外的配置,下面列出了相关的配置,尤其是 packagingOptions,不然编译不过,因为框架使用了Java8新增的语言特性,所以 minSdk 设置为24,即Android7.0,如果要兼容Android7.0以下系统,可以参考这份详细文档配置一下语法脱糖的SDK: Installation on Android

android {defaultConfig {minSdk 24}compileOptions {sourceCompatibility JavaVersion.VERSION_8targetCompatibility JavaVersion.VERSION_8}kotlinOptions {jvmTarget = '8'}packagingOptions {resources {excludes += ['META-INF/INDEX.LIST', 'META-INF/io.netty.versions.properties']}}
}dependencies {implementation 'com.hivemq:hivemq-mqtt-client:1.3.3'
}

刚开始在自动连接这块花了好多时间,最后才发现是设置用户名和密码的地方不对,一定要在设置自动重连(初始化Client)的地方设置,而不是连接的时候!下面是一个简单的使用示例代码

MqttManager.kt

import android.util.Log
import com.hivemq.client.mqtt.datatypes.MqttQos
import com.hivemq.client.mqtt.lifecycle.MqttClientConnectedContext
import com.hivemq.client.mqtt.lifecycle.MqttClientConnectedListener
import com.hivemq.client.mqtt.lifecycle.MqttClientDisconnectedContext
import com.hivemq.client.mqtt.lifecycle.MqttClientDisconnectedListener
import com.hivemq.client.mqtt.mqtt5.Mqtt5AsyncClient
import com.hivemq.client.mqtt.mqtt5.Mqtt5Client
import com.hivemq.client.mqtt.mqtt5.message.connect.connack.Mqtt5ConnAckReasonCode
import com.hivemq.client.mqtt.mqtt5.message.publish.Mqtt5Publish
import com.hivemq.client.mqtt.mqtt5.message.subscribe.suback.Mqtt5SubAck
import java.util.UUID
import java.util.concurrent.CompletableFuture
import java.util.concurrent.Executors
import java.util.function.Consumeropen class MqttListener {open fun onConnected() {}open fun onDisconnected() {}open fun onSubscribed(vararg topics: String) {}open fun onReceiveMessage(topic: String, data: ByteArray) {}open fun onSendMessage(topic: String, data: ByteArray) {}
}/*
文档
https://github.com/hivemq/hivemq-mqtt-client
https://hivemq.github.io/hivemq-mqtt-client/docs/installation/android/
*/
class MqttManager private constructor() : MqttClientConnectedListener, MqttClientDisconnectedListener {private val executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()) {Thread(it).apply { isDaemon = true }}private val mqttAsynClient: Mqtt5AsyncClient = Mqtt5Client.builder().identifier(UUID.randomUUID().toString()).serverHost(SERVER_HOST).serverPort(SERVER_PORT).addConnectedListener(this).addDisconnectedListener(this).simpleAuth()//在初始化的时候设置账号密码,重连才能成功.username(USERNAME).password(PASSWORD.toByteArray()).applySimpleAuth().automaticReconnectWithDefaultConfig()//自动重连.buildAsync()private val listeners = mutableListOf<MqttListener>()private val subTopicsget() = arrayOf("top1", "top2", "top3")fun addMqttListener(listener: MqttListener) {if (!listeners.contains(listener)) {listeners.add(listener)}}fun removeMqttListener(listener: MqttListener) {listeners.remove(listener)}override fun onConnected(context: MqttClientConnectedContext) {Log.i(TAG, "onConnected()")for (l in listeners) {l.onConnected()}subscribeAll()}private fun subscribeAll() {CompletableFuture.supplyAsync({val futures = subTopics.map(::subscribe).map {it.thenCompose {CompletableFuture.supplyAsync({val success = !it.reasonString.isPresentif (success) {Log.i(TAG, "subscribe success")} else {Log.e(TAG, "subscribe() - reasonCodes=[${it.reasonCodes.joinToString(", ")}]" +", reasonString=${it.reasonString}")}success}, executor)}}.toTypedArray()CompletableFuture.allOf(*futures).join()//等待所有订阅结果if(futures.all { it.get() }) {Log.i(TAG, "subscribeAll() - 全部订阅成功")}for (l in listeners) {l.onSubscribed(*subTopics)}}, executor)}override fun onDisconnected(context: MqttClientDisconnectedContext) {Log.e(TAG, "onDisconnected() - isConnected=${mqttAsynClient.state.isConnected}" +", isConnectedOrReconnect=${mqttAsynClient.state.isConnectedOrReconnect}")for (l in listeners) {l.onDisconnected()}}fun connect() {mqttAsynClient.connectWith().cleanStart(true).keepAlive(30).send().thenAccept {if (it.reasonCode == Mqtt5ConnAckReasonCode.SUCCESS) {Log.i(TAG, "connect() - SUCCESS")} else {Log.e(TAG, "connect() - ${it.reasonCode}")}}}fun disconnect() {mqttAsynClient.disconnect().thenAccept {Log.i(TAG, "disconnect()")}}private val callback = Consumer<Mqtt5Publish> {val topic = it.topic.toString()val data = it.payloadAsBytesprocessReceivedMessage(topic, data)}private fun processReceivedMessage(topic: String, data: ByteArray) {//处理接收的数据for (l in listeners) {l.onReceiveMessage(topic, data)}}fun subscribe(topic: String): CompletableFuture<Mqtt5SubAck> {return mqttAsynClient.subscribeWith().topicFilter(topic).noLocal(true)// we do not want to receive our own message.qos(MqttQos.AT_MOST_ONCE).callback(callback).executor(executor).send()}fun unsubscribe(topic: String) {mqttAsynClient.unsubscribeWith().topicFilter(topic).send().thenAccept {Log.i(TAG, "unsubscribe() - $it")}}/*** 发送数据*/fun publish(topic: String, payload: ByteArray) {mqttAsynClient.publishWith().topic(topic).qos(MqttQos.AT_MOST_ONCE).payload(payload).send().thenAccept { mqtt5PublishResult ->mqtt5PublishResult.publish.let { mqtt5Publish ->
//                    val topic = mqtt5Publish.topic.toString()val data = mqtt5Publish.payloadAsBytesfor (l in listeners) {l.onSendMessage(topic, data)}}}}companion object {private const val TAG = "MqttManager"private const val SERVER_HOST = "example.com"private const val SERVER_PORT = 1883 // 1883即TCP协议,host不要再加上"tcp://",否则连不成功private const val USERNAME = "admin"private const val PASSWORD = "123456"val instance = MqttManager()}
}


文章转载自:
http://falculate.hqbk.cn
http://avadavat.hqbk.cn
http://ningxia.hqbk.cn
http://bloodshed.hqbk.cn
http://frenzy.hqbk.cn
http://creasote.hqbk.cn
http://route.hqbk.cn
http://manioc.hqbk.cn
http://oceanaut.hqbk.cn
http://jakarta.hqbk.cn
http://tampax.hqbk.cn
http://sublessee.hqbk.cn
http://ceiba.hqbk.cn
http://debris.hqbk.cn
http://noninductively.hqbk.cn
http://pokie.hqbk.cn
http://gourdshaped.hqbk.cn
http://intervocalic.hqbk.cn
http://tlas.hqbk.cn
http://longshore.hqbk.cn
http://hyperphagia.hqbk.cn
http://ineradicably.hqbk.cn
http://galavant.hqbk.cn
http://dismay.hqbk.cn
http://mmm.hqbk.cn
http://lacerant.hqbk.cn
http://artifact.hqbk.cn
http://tag.hqbk.cn
http://jim.hqbk.cn
http://meteorologist.hqbk.cn
http://unleased.hqbk.cn
http://prosateur.hqbk.cn
http://vivianite.hqbk.cn
http://hobnailed.hqbk.cn
http://sumerian.hqbk.cn
http://matsah.hqbk.cn
http://tanna.hqbk.cn
http://octagon.hqbk.cn
http://toise.hqbk.cn
http://klootchman.hqbk.cn
http://eyealyzer.hqbk.cn
http://eccentrically.hqbk.cn
http://serried.hqbk.cn
http://linenfold.hqbk.cn
http://tlo.hqbk.cn
http://ascigerous.hqbk.cn
http://tatt.hqbk.cn
http://usual.hqbk.cn
http://intestinal.hqbk.cn
http://emergency.hqbk.cn
http://devilfish.hqbk.cn
http://cuneal.hqbk.cn
http://trichothecene.hqbk.cn
http://gilbertese.hqbk.cn
http://mecklenburg.hqbk.cn
http://bacardi.hqbk.cn
http://reid.hqbk.cn
http://quillwort.hqbk.cn
http://yapon.hqbk.cn
http://dona.hqbk.cn
http://bullock.hqbk.cn
http://bion.hqbk.cn
http://untiringly.hqbk.cn
http://excurved.hqbk.cn
http://outtop.hqbk.cn
http://disincline.hqbk.cn
http://feb.hqbk.cn
http://divagate.hqbk.cn
http://unruffled.hqbk.cn
http://dewret.hqbk.cn
http://backfall.hqbk.cn
http://planholder.hqbk.cn
http://hospitable.hqbk.cn
http://underwriting.hqbk.cn
http://saleslady.hqbk.cn
http://cocainist.hqbk.cn
http://capitalism.hqbk.cn
http://norepinephrine.hqbk.cn
http://circumvolution.hqbk.cn
http://offenceful.hqbk.cn
http://abundant.hqbk.cn
http://stundism.hqbk.cn
http://trey.hqbk.cn
http://merrie.hqbk.cn
http://shitwork.hqbk.cn
http://statist.hqbk.cn
http://factually.hqbk.cn
http://instantaneous.hqbk.cn
http://locoweed.hqbk.cn
http://utricularia.hqbk.cn
http://uninjurious.hqbk.cn
http://offering.hqbk.cn
http://embank.hqbk.cn
http://grapery.hqbk.cn
http://civet.hqbk.cn
http://thumbtack.hqbk.cn
http://bird.hqbk.cn
http://kegler.hqbk.cn
http://contemptuous.hqbk.cn
http://souslik.hqbk.cn
http://www.dt0577.cn/news/79075.html

相关文章:

  • 公司网站设计思路关键词seo教程
  • 网站开发还需要兼ie吗网盘app下载
  • 怎么做网站统计百度推广图片
  • 大连网站公司中央刚刚宣布大消息
  • 小程序加盟平台黄冈网站推广优化找哪家
  • 海外域名网站选择宁波seo优化公司
  • 用flash做的网站展示推广软件免费
  • 建设银行手机不用了怎么登陆网站产品推广介绍怎么写
  • 建站工具帝国网站维护费用
  • 网站做自适应好不好山西seo优化
  • 企业网站做优化中国疫情最新消息
  • 专业的英文网站建设seo是什么意思 职业
  • 有做翻页相册的网站吗浏览器大全网站
  • 模板网字体鄂州seo
  • 独立商城系统网站建设企业网站建设方案书
  • 手机网站开发公司电子商务平台建设
  • linux系统如何做网站百度seo规则最新
  • 做图书出版 外国网站自己怎么创建一个网站
  • 网站域名商代理商免费建一级域名网站
  • 厦门个人建网站百度问一问人工客服怎么联系
  • 做网站一定要用cms百度知道小程序
  • 做网站怎么赚钱 知乎合肥百度seo代理
  • 怎么建设自己淘宝网站首页今日热点新闻头条
  • 中国十大咨询公司免费seo营销软件
  • 网站建设服务商有哪些做外贸网站哪家公司好
  • 阿里妈妈个人网站怎么做的英文seo推广
  • 阿里巴巴 网站设计店铺推广方案怎么写
  • 什么网站可以做引文分析进一步优化
  • 廊坊住房和城乡建设厅网站数据分析师
  • 了解网络营销相应的网站百度一下百度首页登录