event标识以topic中的为准
This commit is contained in:
parent
02dc934820
commit
5e326544f7
|
@ -24,7 +24,24 @@ public enum TopicMessageCodec {
|
|||
//上报属性数据
|
||||
reportProperty("/*/properties/report", ReportPropertyMessage.class),
|
||||
//事件上报
|
||||
event("/*/event/*", EventMessage.class),
|
||||
event("/*/event/*", EventMessage.class) {
|
||||
@Override
|
||||
Publisher<DeviceMessage> doDecode(ObjectMapper mapper, String[] topic, byte[] payload) {
|
||||
String event = topic[topic.length - 1];
|
||||
|
||||
return Mono.from(super.doDecode(mapper, topic, payload))
|
||||
.cast(EventMessage.class)
|
||||
.doOnNext(e -> e.setEvent(event))
|
||||
.cast(DeviceMessage.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
void refactorTopic(String[] topics, DeviceMessage message) {
|
||||
super.refactorTopic(topics, message);
|
||||
EventMessage event = ((EventMessage) message);
|
||||
topics[topics.length - 1] = String.valueOf(event.getEvent());
|
||||
}
|
||||
},
|
||||
//读取属性
|
||||
readProperty("/*/properties/read", ReadPropertyMessage.class),
|
||||
//读取属性回复
|
||||
|
|
|
@ -2,6 +2,8 @@ package org.jetlinks.protocol.official;
|
|||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.jetlinks.core.message.ChildDeviceMessage;
|
||||
import org.jetlinks.core.message.DeviceMessage;
|
||||
import org.jetlinks.core.message.event.EventMessage;
|
||||
import org.jetlinks.core.message.property.ReportPropertyMessage;
|
||||
import org.junit.Test;
|
||||
import reactor.test.StepVerifier;
|
||||
|
@ -41,4 +43,21 @@ public class TopicMessageCodecTest {
|
|||
testChild(ObjectMappers.JSON_MAPPER);
|
||||
testChild(ObjectMappers.CBOR_MAPPER);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvent() {
|
||||
EventMessage eventMessage = new EventMessage();
|
||||
eventMessage.setEvent("test");
|
||||
eventMessage.setDeviceId("test-device");
|
||||
eventMessage.setData("123");
|
||||
|
||||
TopicPayload payload = TopicMessageCodec.encode(ObjectMappers.JSON_MAPPER, eventMessage);
|
||||
assertEquals(payload.getTopic(), "/test-device/event/test");
|
||||
|
||||
|
||||
DeviceMessage msg = TopicMessageCodec
|
||||
.decode(ObjectMappers.JSON_MAPPER, payload.getTopic(), payload.getPayload())
|
||||
.blockLast();
|
||||
assertEquals(msg.toJson(),eventMessage.toJson());
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue