Firmware CoAP and transport improvement
This commit is contained in:
parent
edc993427e
commit
7edcc605e9
@ -33,6 +33,7 @@ import org.thingsboard.server.common.data.Device;
|
||||
import org.thingsboard.server.common.data.DeviceProfile;
|
||||
import org.thingsboard.server.common.data.EntityType;
|
||||
import org.thingsboard.server.common.data.Firmware;
|
||||
import org.thingsboard.server.common.data.FirmwareInfo;
|
||||
import org.thingsboard.server.common.data.ResourceType;
|
||||
import org.thingsboard.server.common.data.TbResource;
|
||||
import org.thingsboard.server.common.data.TenantProfile;
|
||||
@ -471,19 +472,22 @@ public class DefaultTransportApiService implements TransportApiService {
|
||||
if (firmwareId == null) {
|
||||
builder.setResponseStatus(TransportProtos.ResponseStatus.NOT_FOUND);
|
||||
} else {
|
||||
Firmware firmware = firmwareService.findFirmwareById(tenantId, firmwareId);
|
||||
FirmwareInfo firmwareInfo = firmwareService.findFirmwareInfoById(tenantId, firmwareId);
|
||||
|
||||
if (firmware == null) {
|
||||
if (firmwareInfo == null) {
|
||||
builder.setResponseStatus(TransportProtos.ResponseStatus.NOT_FOUND);
|
||||
} else {
|
||||
builder.setResponseStatus(TransportProtos.ResponseStatus.SUCCESS);
|
||||
builder.setFirmwareIdMSB(firmwareId.getId().getMostSignificantBits());
|
||||
builder.setFirmwareIdLSB(firmwareId.getId().getLeastSignificantBits());
|
||||
builder.setTitle(firmware.getTitle());
|
||||
builder.setVersion(firmware.getVersion());
|
||||
builder.setFileName(firmware.getFileName());
|
||||
builder.setContentType(firmware.getContentType());
|
||||
firmwareDataCache.put(firmwareId.toString(), firmware.getData().array());
|
||||
builder.setTitle(firmwareInfo.getTitle());
|
||||
builder.setVersion(firmwareInfo.getVersion());
|
||||
builder.setFileName(firmwareInfo.getFileName());
|
||||
builder.setContentType(firmwareInfo.getContentType());
|
||||
if (!firmwareDataCache.has(firmwareId.toString())) {
|
||||
Firmware firmware = firmwareService.findFirmwareById(tenantId, firmwareId);
|
||||
firmwareDataCache.put(firmwareId.toString(), firmware.getData().array());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -24,4 +24,9 @@ public interface FirmwareDataCache {
|
||||
void put(String key, byte[] value);
|
||||
|
||||
void evict(String key);
|
||||
|
||||
default boolean has(String firmwareId) {
|
||||
byte[] data = get(firmwareId, 1, 0);
|
||||
return data != null && data.length > 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -20,7 +20,6 @@ import com.google.protobuf.Descriptors;
|
||||
import com.google.protobuf.DynamicMessage;
|
||||
import lombok.Data;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.eclipse.californium.core.coap.CoAP;
|
||||
import org.eclipse.californium.core.coap.Request;
|
||||
import org.eclipse.californium.core.coap.Response;
|
||||
@ -34,6 +33,7 @@ import org.thingsboard.server.coapserver.TbCoapDtlsSessionInfo;
|
||||
import org.thingsboard.server.common.data.DataConstants;
|
||||
import org.thingsboard.server.common.data.DeviceProfile;
|
||||
import org.thingsboard.server.common.data.DeviceTransportType;
|
||||
import org.thingsboard.server.common.data.StringUtils;
|
||||
import org.thingsboard.server.common.data.TransportPayloadType;
|
||||
import org.thingsboard.server.common.data.device.profile.CoapDeviceProfileTransportConfiguration;
|
||||
import org.thingsboard.server.common.data.device.profile.CoapDeviceTypeConfiguration;
|
||||
@ -448,7 +448,7 @@ public class CoapTransportResource extends AbstractCoapTransportResource {
|
||||
if (msg.getResponseStatus().equals(TransportProtos.ResponseStatus.SUCCESS)) {
|
||||
if (msg.getTitle().equals(title) && msg.getVersion().equals(version)) {
|
||||
String firmwareId = new UUID(msg.getFirmwareIdMSB(), msg.getFirmwareIdLSB()).toString();
|
||||
String strChunkSize = exchange.getQueryParameter("chunkSize");
|
||||
String strChunkSize = exchange.getQueryParameter("size");
|
||||
String strChunk = exchange.getQueryParameter("chunk");
|
||||
int chunkSize = StringUtils.isEmpty(strChunkSize) ? 0 : Integer.parseInt(strChunkSize);
|
||||
int chunk = StringUtils.isEmpty(strChunk) ? 0 : Integer.parseInt(strChunk);
|
||||
|
||||
@ -539,8 +539,7 @@ public class DefaultTransportService implements TransportService {
|
||||
new TbProtoQueueMsg<>(UUID.randomUUID(), TransportProtos.TransportApiRequestMsg.newBuilder().setFirmwareRequestMsg(msg).build());
|
||||
|
||||
AsyncCallbackTemplate.withCallback(transportApiRequestTemplate.send(protoMsg), response -> {
|
||||
TransportProtos.GetFirmwareResponseMsg firmwareResponseMsg = response.getValue().getFirmwareResponseMsg();
|
||||
callback.onSuccess(firmwareResponseMsg);
|
||||
callback.onSuccess(response.getValue().getFirmwareResponseMsg());
|
||||
}, callback::onError, transportCallbackExecutor);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user