public class InterceptorDeviceMessageCodec extends Object implements DeviceMessageCodec
| 构造器和说明 |
|---|
InterceptorDeviceMessageCodec(DeviceMessageCodec codec) |
| 限定符和类型 | 方法和说明 |
|---|---|
reactor.core.publisher.Flux<? extends Message> |
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.Flux<? extends EncodedMessage> |
encode(MessageEncodeContext context)
编码,将消息进行编码,用于发送到设备端.
|
Transport |
getSupportTransport() |
void |
register(DeviceMessageCodecInterceptor interceptor) |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitgetDescriptionpublic InterceptorDeviceMessageCodec(DeviceMessageCodec codec)
public Transport getSupportTransport()
getSupportTransport 在接口中 DeviceMessageCodecDefaultTransportpublic void register(DeviceMessageCodecInterceptor interceptor)
@Nonnull public reactor.core.publisher.Flux<? extends EncodedMessage> encode(@Nonnull MessageEncodeContext context)
DeviceMessageEncoderDeviceMessage转为设备能理解的消息EncodedMessage.
例如:
//返回单个消息给设备,多个使用Flux<EncodedMessage>作为返回值
public Mono<EncodedMessage> encode(MessageEncodeContext context){
return Mono.just(doEncode(context.getMessage()));
}
//忽略发送给设备,直接返回结果给指令发送者
public Mono<EncodedMessage> encode(MessageEncodeContext context){
DeviceMessage message = (DeviceMessage)context.getMessage();
return context
.reply(handleMessage(message)) //返回结果给指令发送者
.then(Mono.empty())
}
如果要串行发送数据,可以参考使用ParallelIntervalHelper工具类encode 在接口中 DeviceMessageEncodercontext - 消息上下文MqttMessage,
Message,
读取设备属性,
修改设备属性,
调用设备功能,
子设备消息,
DeviceMessageEncodeInterceptor,
ParallelIntervalHelper@Nonnull public reactor.core.publisher.Flux<? extends Message> decode(@Nonnull MessageDecodeContext context)
DeviceMessageDecoderEncodedMessage转为平台的统一消息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);
}
decode 在接口中 DeviceMessageDecodercontext - 消息上下文MqttMessage,
HttpExchangeMessage,
CoapExchangeMessage,
DeviceMessageReply,
ReadPropertyMessageReply,
FunctionInvokeMessageReply,
ChildDeviceMessageReply,
DeviceOnlineMessage,
DeviceOfflineMessage,
DeviceMessageDecodeInterceptorCopyright © 2019–2022. All rights reserved.