| 程序包 | 说明 |
|---|---|
| org.jetlinks.core.message.codec | |
| org.jetlinks.core.message.interceptor |
| 限定符和类型 | 接口和说明 |
|---|---|
interface |
FromDeviceMessageContext
来自设备的消息上下文,可以通过此上下文获取设备会话
|
| 限定符和类型 | 方法和说明 |
|---|---|
org.reactivestreams.Publisher<? extends Message> |
DeviceMessageDecoder.decode(MessageDecodeContext context)
在服务器收到设备或者网络组件中发来的消息时,会调用协议包中的此方法来进行解码,
将数据
EncodedMessage转为平台的统一消息DeviceMessage
//解码并返回一个消息
public Mono<DeviceMessage> decode(MessageDecodeContext context){
EncodedMessage message = context.getMessage();
byte[] payload = message.payloadAsBytes();//上报的数据
DeviceMessage message = doEncode(payload);
return Mono.just(message);
}
//解码并返回多个消息
public Flux<DeviceMessage> decode(MessageDecodeContext context){
EncodedMessage message = context.getMessage();
byte[] payload = message.payloadAsBytes();//上报的数据
List<DeviceMessage> messages = doEncode(payload);
return Flux.fromIterable(messages);
}
//解码,回复设备并返回一个消息
public Mono<DeviceMessage> decode(MessageDecodeContext context){
EncodedMessage message = context.getMessage();
byte[] payload = message.payloadAsBytes();//上报的数据
DeviceMessage message = doEncode(payload); //解码
FromDeviceMessageContext ctx = (FromDeviceMessageContext)context;
EncodedMessage msg = createReplyMessage(); //构造回复
return ctx
.getSession()
.send(msg) //发送回复
.thenReturn(message);
}
|
reactor.core.publisher.Mono<DeviceMessage> |
TransportDeviceMessageCodec.decode(MessageDecodeContext context) |
reactor.core.publisher.Flux<? extends Message> |
InterceptorDeviceMessageCodec.decode(MessageDecodeContext context) |
| 限定符和类型 | 方法和说明 |
|---|---|
default <T extends Message,R extends T> |
DeviceMessageDecodeInterceptor.postDecode(MessageDecodeContext context,
R deviceMessage)
解码后执行
|
default void |
DeviceMessageDecodeInterceptor.preDecode(MessageDecodeContext context)
解码前执行
|
Copyright © 2019–2022. All rights reserved.