jetlinks之Codec
提示:jetlinks之Codec编码器,用于元素对象的编码解密
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:jetlinks编码器,主要对各种数据类型的编码解码,
包含以下类型:
Boolean,ByteBuf,Byte,byte[],Double,Enum,Throwable,Float,Integer
,JSONArray,JSONObject,Message(消息),Payload(消息负载) 等
一、编码器
Decoder 解码
Encoder 编码
Codec 编码器接口定义
CodecsSupport 编码支持接口定义,支持编解码优先级排序设置
DefaultCodecsSupport 默认编码支持实现,若有具体泛型类型则按具体类型进行编解码,若无则按json进行编解码
Codecs 编码器 加载所有类型编码器,支持编码器注册, 查询等操作
ServiceLoader
.load(CodecsSupport.class)
.forEach(allCodec::add);
allCodec.sort(Comparator.comparingInt(CodecsSupport::getOrder));
二、配置
1.代码结构
ConfigKey 用于定义配置key,增加key的可读性,支持key,名称说明,类型设置,提供相关of构造器,
ConfigKeyValue 键值对定义,继承ConfigKey 增加value定义
ConfigStorage 配置存储器,用于定义配置存储接口以及常用方法(添加,删除,清空方法)
ConfigStorageManager 配置存储管理器
SimpleConfigKey 简单配置实现
StorageConfigurable 配置化支撑
Configurable 可配置接口定义
该包主要定义配置相关,对配置类型进行定义,配置存储管理器设定及可配置接口进行定义。
目前jetlinks-core包中主要有以下类都实现了
三、jetlinks的defaults默认配置
1.代码概览
提示:主要包含一些基础的定义
ProtocolSupport 消息协议支持接口,通过实现此接口来自定义消息协议
主要包含一些基础的定义包含 协议ID ,协议名称,说明 属性,提供 获取支持的协议类型,获取设备消息编码解码器,获取设备消息发送拦截器, 用于拦截发送消息的行为,获取默认的设备物模型编解码器,获取协议所需的配置信息定义,获取自定义设备状态检查器
ProtocolSupports 多协议支持接口 是否支持多协议
Authenticator 认证器,用于设备连接的时候进行认证,
CompositeProtocolSupport 组合协议支撑
DefaultDeviceMessageSender 消息发送器默认实现 实现消息发送器定义
2.消息协议
初次熟悉代码,本章仅做记录,简单理解下协议部分,等对整体有更深的认知后再进行单独学习理解
ProtocolSupport 消息协议支持接口,通过实现此接口来自定义消息协议,包含 协议ID ,协议名称,说明等属性,提供获取协议类型,编码解码器,发送拦截器,物模型等方法
CompositeProtocolSupport 组合协议支撑
协议实现ProtocolSupport接口
组合协议实现主要包含以下属性:
基础属性:协议ID,协议名称,协议说明
协议物模型编码器,协议配置信息定义,设备物模型定义,消息转换器定义
物模型拓展信息定义,设备消息拦截器,设备认证,设备状态检查器,初始化配置信息
方法:设备注册生效回调函数,设备注销前调用函数,当设备物模型变更时调用函数,产品注册后调用函数,产品注销前调用函数,产品物模型变更回调
ProtocolSupports 协议组定义
CompositeProtocolSupports 协议组实现,多协议设置封装,主要提供是否支持判断,协议获取等方法
3.消息发送器
DeviceMessageSender 消息发送器定义
DefaultDeviceMessageSender 消息发送器默认实现
FunctionInvokeMessageSender 通用设备功能消息发送器定义
/**
* 发送一个支持回复的消息.
*/
<R extends DeviceMessageReply> Flux<R> send(Publisher<RepayableDeviceMessage<R>> message);
/**
* 发送消息并自定义返回结果转换器
*/
<R extends DeviceMessage> Flux<R> send(Publisher<? extends DeviceMessage> message, Function<Object, R> replyMapping);
/**
* 发送消息并获取返回
*/
<R extends DeviceMessage> Flux<R> send(DeviceMessage message);
/**
* 发送消息后返回结果,不等待回复
*/
default Mono<Void> sendAndForget(DeviceMessage message) {
}
/**
* 发送{@link org.jetlinks.core.message.function.FunctionInvokeMessage}消息更便捷的API
*/
FunctionInvokeMessageSender invokeFunction(String function);
/**
* 发送{@link org.jetlinks.core.message.property.ReadPropertyMessage}消息更便捷的API
*/
ReadPropertyMessageSender readProperty(String... property);
FunctionInvokeMessageSender 通用消息发送器 理解:为自定义发送消息提供的简便API
该接口主要提供了以下方法:
消息回调,header设置,消息ID设置,消息参数添加,消息参数集合设置,消息发送器检查(检查相关设备操作配置等是否完善),有回复发送,异步发送(忽略返回)