event标识以topic中的为准

This commit is contained in:
zhou-hao 2021-07-28 15:05:19 +08:00
parent 02dc934820
commit 5e326544f7
2 changed files with 37 additions and 1 deletions

View File

@ -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),
//读取属性回复

View File

@ -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());
}
}