Bläddra i källkod

decode时可以通过context获取指定的设备id

zhou-hao 4 år sedan
förälder
incheckning
c7a4a8f08a

+ 5 - 0
jetlinks-components/network-component/mqtt-component/src/main/java/org/jetlinks/community/network/mqtt/gateway/device/MqttClientDeviceGateway.java

@@ -134,6 +134,11 @@ public class MqttClientDeviceGateway implements DeviceGateway {
                         public DeviceOperator getDevice() {
                             return null;
                         }
+
+                        @Override
+                        public Mono<DeviceOperator> getDevice(String deviceId) {
+                            return registry.getDevice(deviceId);
+                        }
                     }))
                     .doOnError((err) -> log.error("解码MQTT客户端消息失败 {}:{}",
                         mqttMessage.getTopic(), mqttMessage.getPayload().toString(StandardCharsets.UTF_8), err))

+ 1 - 1
jetlinks-components/network-component/mqtt-component/src/main/java/org/jetlinks/community/network/mqtt/gateway/device/MqttServerDeviceGateway.java

@@ -224,7 +224,7 @@ class MqttServerDeviceGateway implements DeviceGateway, MonitorSupportDeviceGate
         return operator
             .getProtocol()
             .flatMap(protocol -> protocol.getMessageCodec(getTransport()))
-            .flatMapMany(codec -> codec.decode(FromDeviceMessageContext.of(session, message)))
+            .flatMapMany(codec -> codec.decode(FromDeviceMessageContext.of(session, message,registry)))
             .cast(DeviceMessage.class)
             .flatMap(msg -> {
                 if (msg instanceof CommonDeviceMessage) {

+ 1 - 1
jetlinks-components/network-component/tcp-component/src/main/java/org/jetlinks/community/network/tcp/device/TcpServerDeviceGateway.java

@@ -162,7 +162,7 @@ class TcpServerDeviceGateway implements DeviceGateway, MonitorSupportDeviceGatew
 
             return getProtocol()
                 .flatMap(pt -> pt.getMessageCodec(getTransport()))
-                .flatMapMany(codec -> codec.decode(FromDeviceMessageContext.of(sessionRef.get(), message)))
+                .flatMapMany(codec -> codec.decode(FromDeviceMessageContext.of(sessionRef.get(), message,registry)))
                 .cast(DeviceMessage.class)
                 .doOnNext(msg-> gatewayMonitor.receivedMessage())
                 .flatMap(this::handleDeviceMessage)