从此版本起发布至mavenCentral。
在Java中构造socket对象时可以返回对象以直接打开。
OnOpenCallback
增加error
回调,用于处理异常情况。
升级依赖版本,目前Kotlin版本为1.7.20
。
ISocket
增加openSync()
函数,用于同步阻塞式开启连接。
MQTT通信增强模块,支持MQTT控制器式订阅。
升级依赖版本,目前Kotlin版本为1.6.21
。
MQTT订阅机制更新,现在在多次重复订阅同一个topic时不会冲突。
现在Desktop
目标的默认JVM版本为8以兼容JAVA 1.8。
IMqttSocket
增加path
属性,便于MQTT通过ws连接时构建url。IMqttSocket
增加callbackOnMain
属性,便于在无ui线程的平台上阻塞运行或另开线程。/**
* 同步发送数据
* @param message 数据内容
*/
fun sendSync(message: String)
/**
* 同步发送数据
* @param topic 主题
* @param message 数据内容
*/
fun sendSync(topic: String, message: String)
/**
* 同步发送指定发送主题数据并根据接收主题接收消息
* @param outTopic 发送主题
* @param inTopic 接收主题
* @param message 数据内容
* @param onReceive 回调函数
*/
fun sendAndReceiveSync(outTopic: String, inTopic: String, message: String, onReceive: OnReceiveFunc)
/**
* 同步发送指定发送主题数据并根据接收主题接收消息
* @param outTopic 发送主题
* @param inTopic 接收主题
* @param message 数据内容
* @param timeout 超时时间,单位毫秒,设为负数则无时间规定
* @return 接收到的内容,如果超时则会返回null
*/
fun sendAndReceiveSync(outTopic: String, inTopic: String, message: String, timeout: Long = -1L): String?
IMqttSocket
增加threadLock
,用于选择是否开启同步锁。修复错误的硬编码。
更改模块名为socket
更改包名。
com.gitee.xuankaicat.communicate
改为com.gitee.xuankaicat.kmnkt.socket
。
更改接口名。
Communicate
改为ISocket
。
MQTTCommunicate
改为IMqttSocket
。
增加获取通信对象的接口socket
,便于扩展未封装的功能。
更改模块名为aliyun-iot
。
更改包名。
com.gitee.xuankaicat.communicate.aliyuniot
改为com.gitee.xuankaicat.kmnkt.aliyuniot
。
serverPort
属性。原版:
private val communicate = Communicate.UDP.apply {
address = "10.0.2.2"//设置ip地址
port = 9000//设置端口号
inCharset = Charset.forName("gb2312")//设置输入编码
outCharset = Charset.forName("gb2312")//设置输出编码
}
新版:
import com.gitee.xuankaicat.communicate.dsl.udp
private val communicate = udp {
address = "10.0.2.2"//设置ip地址
port = 9000//设置端口号
inCharset = Charset.forName("gb2312")//设置输入编码
outCharset = Charset.forName("gb2312")//设置输出编码
}
sendAndReceive
函数以发送指定发送主题数据并根据接收主题接收消息。支持快速构建阿里云mqtt对象。
import com.gitee.xuankaicat.communicate.aliyuniot.mqtt
val mqtt = mqtt(AliyunMqtt(
productKey = "",
deviceName = "",
deviceSecret = "",
regionId = "cn-shanghai"
))
支持部分协议:
目前alink协议的实现还不是很完善,欢迎提交issue或pull request。
参考examples/AliyunIotDemo
。
已合并入communicate模块。
1.更新默认IP地址为10.0.2.2
。
2.弃用serverPort
,使用更符合直觉的port
设置端口。
3.UDP现在在无法发送的情况会抛出异常。
1.新增失去连接时的回调,在open
时通过loss
设置。失去连接时的默认为尝试重新连接。
2.TCP与UDP通信过程会有更详细的日志打印。
kotlin使用DSL构建时说明文档丢失。
在cleanSession
为true时断开连接会将接收状态设置为false。
通信对象增加cleanSession
与keepAliveInterval
字段用于配置。
cleanSession
: 断开连接后是否清楚缓存,如果清除缓存则在重连后需要手动恢复订阅。默认为true。
keepAliveInterval
: 检测连接是否中断的间隔。默认为20秒。
修复MQTT通信中断重连时失败不会继续尝试连接
TCP、MQTT:修复failure分支的返回与预期行为不符。
1.修复MQTT通信因两层判断难以进入failure分支。 #I4ODGA:mqtt open failure retrun=true,自动重连5次失败后会回调success,实际没有成功
2.MQTTCommunicate
增加timeOut
字段用于设置超时时间,超过这个时间未连接将进行失败回调,默认为10秒。
startReceive
参数由(String)->Boolean
改为(String, Any)->Boolean
。第二个参数在不同的通信方式中会返回不同的值:
kotlin仍然可以使用单参调用的方式。由于使用了kotlin的语言特性,java必须使用双参版本。
1.修复MQTT监听时导致的阻塞问题。
2.MQTT收到消息时现在会打印一条带有Topic于Message的日志。
1.增加addInMessageTopic
与removeInMessageTopic
用于订阅多个主题。
2.send(topic: String, message: String)
可以发送指定主题的信息。
3.移除废弃api。
取消open函数返回值,改为使用OnOpenCallback
构造成功与失败的回调函数
可以使用DSL构建open的回调函数
修正mqtt包依赖项
1.允许使用lambda直接构造对象
2.普通构造对象可以去掉get,比如Communicate.getUDP()
可以写成Communicate.UDP()
1.使用inMessageTopic
替代publishTopic
2.使用outMessageTopic
替代responseTopic
在构造mqtt时现在可以从Communicate
直接得到对象实例,而不是通过MQTTCommunicate
Android实现socket通信统一接口的类库,已实现UDP与TCPClient