Commit 8a23b819 by huangjy

mqtt协议包,新增远程升级

parent cb92d1d0
...@@ -2,6 +2,7 @@ package org.jetlinks.protocol.official; ...@@ -2,6 +2,7 @@ package org.jetlinks.protocol.official;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
...@@ -12,12 +13,10 @@ import org.jetlinks.core.message.DeviceMessage; ...@@ -12,12 +13,10 @@ import org.jetlinks.core.message.DeviceMessage;
import org.jetlinks.core.message.DisconnectDeviceMessage; import org.jetlinks.core.message.DisconnectDeviceMessage;
import org.jetlinks.core.message.Message; import org.jetlinks.core.message.Message;
import org.jetlinks.core.message.codec.*; import org.jetlinks.core.message.codec.*;
import org.jetlinks.core.message.firmware.UpgradeFirmwareMessage;
import org.jetlinks.core.message.property.ReadPropertyMessage; import org.jetlinks.core.message.property.ReadPropertyMessage;
import org.jetlinks.core.message.property.WritePropertyMessage; import org.jetlinks.core.message.property.WritePropertyMessage;
import org.jetlinks.protocol.official.entity.CustomMessage; import org.jetlinks.protocol.official.entity.*;
import org.jetlinks.protocol.official.entity.CustomReadMessage;
import org.jetlinks.protocol.official.entity.CustomWriteMessage;
import org.jetlinks.protocol.official.entity.UserServerInfo;
import reactor.core.publisher.Flux; import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
...@@ -127,6 +126,7 @@ public class JetLinksMqttDeviceMessageCodec implements DeviceMessageCodec { ...@@ -127,6 +126,7 @@ public class JetLinksMqttDeviceMessageCodec implements DeviceMessageCodec {
CustomWriteMessage.PayLoad payLoad = new CustomWriteMessage.PayLoad(); CustomWriteMessage.PayLoad payLoad = new CustomWriteMessage.PayLoad();
payLoad.setDeviceId(deviceMessage.getDeviceId()); payLoad.setDeviceId(deviceMessage.getDeviceId());
Map<String, Object> properties = ((WritePropertyMessage) deviceMessage).getProperties(); Map<String, Object> properties = ((WritePropertyMessage) deviceMessage).getProperties();
Object result = properties.get("usrServerInfo"); Object result = properties.get("usrServerInfo");
if (result != null) { if (result != null) {
...@@ -137,12 +137,47 @@ public class JetLinksMqttDeviceMessageCodec implements DeviceMessageCodec { ...@@ -137,12 +137,47 @@ public class JetLinksMqttDeviceMessageCodec implements DeviceMessageCodec {
} else { } else {
payLoad.setProperties(properties); payLoad.setProperties(properties);
} }
customSendMessage.setPayload(payLoad); customSendMessage.setPayload(payLoad);
customSendMessage.setTimestamp(deviceMessage.getTimestamp()); customSendMessage.setTimestamp(deviceMessage.getTimestamp());
customSendMessage.setMessageId(deviceMessage.getMessageId()); customSendMessage.setMessageId(deviceMessage.getMessageId());
mapper.configure(JsonGenerator.Feature.ESCAPE_NON_ASCII, true);
convertResult = TopicMessageCodec.encode(mapper, customSendMessage); convertResult = TopicMessageCodec.encode(mapper, customSendMessage);
} else { } else if (deviceMessage instanceof UpgradeFirmwareMessage) {
CustomUpgradeFirmwareMessage customUpgradeFirmwareMessage = new CustomUpgradeFirmwareMessage();
CustomUpgradeFirmwareMessage.Header header = new CustomUpgradeFirmwareMessage.Header();
header.setTimestamp(deviceMessage.getTimestamp());
header.setVersion(1);
header.setUuid(deviceMessage.getMessageId());
customUpgradeFirmwareMessage.setHeader(header);
CustomUpgradeFirmwareMessage.PayLoad payLoad = new CustomUpgradeFirmwareMessage.PayLoad();
String url = ((UpgradeFirmwareMessage) deviceMessage).getUrl();
payLoad.setUrl(url);
Map<String, Object> parameters = ((UpgradeFirmwareMessage) deviceMessage).getParameters();
payLoad.setParameters(parameters);
String signMethod = ((UpgradeFirmwareMessage) deviceMessage).getSignMethod();
payLoad.setSignMethod(signMethod);
long size = ((UpgradeFirmwareMessage) deviceMessage).getSize();
payLoad.setSize(size);
String sign = ((UpgradeFirmwareMessage) deviceMessage).getSign();
payLoad.setSign(sign);
String version = ((UpgradeFirmwareMessage) deviceMessage).getVersion();
payLoad.setFirmwareVersion(version);
payLoad.setFirmwareId(((UpgradeFirmwareMessage) deviceMessage).getFirmwareId());
customUpgradeFirmwareMessage.setPayload(payLoad);
customUpgradeFirmwareMessage.setMessageId(deviceMessage.getMessageId());
customUpgradeFirmwareMessage.setDeviceId(deviceMessage.getDeviceId());
convertResult = TopicMessageCodec.encode(mapper, customUpgradeFirmwareMessage);
}else {
convertResult = TopicMessageCodec.encode(mapper, deviceMessage); convertResult = TopicMessageCodec.encode(mapper, deviceMessage);
} }
...@@ -182,11 +217,11 @@ public class JetLinksMqttDeviceMessageCodec implements DeviceMessageCodec { ...@@ -182,11 +217,11 @@ public class JetLinksMqttDeviceMessageCodec implements DeviceMessageCodec {
} catch (UnsupportedEncodingException e) { } catch (UnsupportedEncodingException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
CustomMessage customMessage = JSON.parseObject(body, CustomMessage.class);
String properties = customMessage.getPayload().getProperties();
Map<String,Object> map = new HashMap<>();
String result; String result;
Map<String,Object> map = new HashMap<>();
if (message.getTopic().contains("read") || message.getTopic().contains("write")) { if (message.getTopic().contains("read") || message.getTopic().contains("write")) {
CustomMessage customMessage = JSON.parseObject(body, CustomMessage.class);
String properties = customMessage.getPayload().getProperties();
String messageId = customMessage.getHeader().getUuid(); String messageId = customMessage.getHeader().getUuid();
JSONObject jsonObject = JSON.parseObject(properties); JSONObject jsonObject = JSON.parseObject(properties);
Set<String> keySet = jsonObject.keySet(); Set<String> keySet = jsonObject.keySet();
...@@ -199,9 +234,29 @@ public class JetLinksMqttDeviceMessageCodec implements DeviceMessageCodec { ...@@ -199,9 +234,29 @@ public class JetLinksMqttDeviceMessageCodec implements DeviceMessageCodec {
map.put("messageId",messageId); map.put("messageId",messageId);
map.put("timestamp",System.currentTimeMillis()); map.put("timestamp",System.currentTimeMillis());
result = JSON.toJSONString(map); result = JSON.toJSONString(map);
} else { } else if (message.getTopic().contains("firmware/upgrade")) {
CustomFirmwareMessage customFirmwareMessage = JSON.parseObject(body, CustomFirmwareMessage.class);
CustomFirmwareMessage.PayLoad payload = customFirmwareMessage.getPayload();
if (message.getTopic().contains("firmware/upgrade/reply")) {
map.put("success",true);
map.put("messageId",customFirmwareMessage.getHeader().getUuid());
} else {
map.put("success",payload.getRetCode() == 0);
map.put("progress",payload.getProgress());
map.put("complete",payload.getProgress() == 100);
map.put("errorReason",payload.getValue());
map.put("version",payload.getFirmwareVersion());
map.put("firmwareId",payload.getFirmwareId());
}
map.put("timestamp",System.currentTimeMillis());
result = JSON.toJSONString(map);
} else if (message.getTopic().contains("properties/report")){
CustomMessage customMessage = JSON.parseObject(body, CustomMessage.class);
String properties = customMessage.getPayload().getProperties();
map.put("properties", JSON.parseObject(properties)); map.put("properties", JSON.parseObject(properties));
result = JSON.toJSONString(map); result = JSON.toJSONString(map);
} else {
result = body;
} }
byte[] bytes; byte[] bytes;
try { try {
......
package org.jetlinks.protocol.official.entity;
import lombok.Data;
@Data
public class CustomFirmwareMessage {
private Header header;
private PayLoad payload;
private boolean success;
private String messageId;
private Long timestamp;
@Data
public class Header {
private String version;
private String uuid;
private Long timestamp;
}
@Data
public class PayLoad {
private Integer progress;
private Integer retCode;
private String firmwareVersion;
private String firmwareId;
private String value;
}
@Data
public class DeviceAttrInfo {
private String key;
private String value;
}
}
package org.jetlinks.protocol.official.entity;
import lombok.Data;
import org.jetlinks.core.message.firmware.UpgradeFirmwareMessage;
import java.util.Map;
@Data
public class CustomUpgradeFirmwareMessage extends UpgradeFirmwareMessage {
private Header header;
private PayLoad payload;
@Data
public static class Header {
private int version;
private String uuid;
private Long timestamp;
}
@Data
public static class PayLoad {
private String url;
private String firmwareVersion;
private String sign;
private String signMethod;
private String firmwareId;
private long size;
private Map<String, Object> parameters;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment