public interface CodecContext
Message.getMessageId()来进行请求响应关联时
通过在协议包中使用此接口来进行处理.
例如:
//类成员变量
CodecContext context = CodecContext.newContext();
public Publisher<DeviceMessage> decode(MessageDecodeContext ctx){
//1.解码
//2.设备返回的消息ID
String deviceMsgId =.....;
//3.去除缓存的消息并创建回复
ReadPropertyMessageReply reply = context.<ReadPropertyMessage>removeDownstream(deviceMsgId)
.map(ReadPropertyMessage::newReply)
.orElseThrow(()->new NullPointerException("找不到下行指令"))
.success(Collections.singletonMap("test","1"));
return Mono.just(reply);
}
public Publisher<EncodedMessage> encode(MessageEncodeContext ctx){
//1.编码
//2.设备支持消息ID
String deviceMsgId =....;
Message msg = ctx.getMessage();
if(msg instanceof ReadPropertyMessage){
ReadPropertyMessage readMsg = (ReadPropertyMessage)msg;
context.cacheDownstream(deviceMsgId, readMsg, Duration.ofMinutes(1));
//编码要发给设备的指令
return encodeReadProperty(readMsg);
}
}
| 限定符和类型 | 方法和说明 |
|---|---|
default void |
cacheDownstream(Object key,
RepayableDeviceMessage<? extends DeviceMessageReply> message)
缓存下行消息,默认30秒超时
|
void |
cacheDownstream(Object key,
RepayableDeviceMessage<? extends DeviceMessageReply> message,
java.time.Duration ttl)
缓存下行消息
|
<T extends RepayableDeviceMessage<? extends DeviceMessageReply>> |
getDownstream(Object key,
boolean remove)
根据key获取下行消息,可通过下行消息来构造消息回复
|
static CodecContext |
newContext() |
default <T extends RepayableDeviceMessage<? extends DeviceMessageReply>> |
removeDownstream(Object key)
根据key获取并删除下行消息,可通过下行消息来构造消息回复
|
static CodecContext newContext()
void cacheDownstream(Object key, RepayableDeviceMessage<? extends DeviceMessageReply> message, java.time.Duration ttl)
key - keymessage - 下行消息ttl - 有效期default void cacheDownstream(Object key, RepayableDeviceMessage<? extends DeviceMessageReply> message)
key - keymessage - 下行消息<T extends RepayableDeviceMessage<? extends DeviceMessageReply>> Optional<T> getDownstream(Object key, boolean remove)
T - 下行消息类型key - keyremove - 自动删除RepayableDeviceMessage.newReply()default <T extends RepayableDeviceMessage<? extends DeviceMessageReply>> Optional<T> removeDownstream(Object key)
T - 下行消息类型key - keyRepayableDeviceMessage.newReply()Copyright © 2019–2022. All rights reserved.