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.DeviceProfile;
|
||||||
import org.thingsboard.server.common.data.EntityType;
|
import org.thingsboard.server.common.data.EntityType;
|
||||||
import org.thingsboard.server.common.data.Firmware;
|
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.ResourceType;
|
||||||
import org.thingsboard.server.common.data.TbResource;
|
import org.thingsboard.server.common.data.TbResource;
|
||||||
import org.thingsboard.server.common.data.TenantProfile;
|
import org.thingsboard.server.common.data.TenantProfile;
|
||||||
@ -471,21 +472,24 @@ public class DefaultTransportApiService implements TransportApiService {
|
|||||||
if (firmwareId == null) {
|
if (firmwareId == null) {
|
||||||
builder.setResponseStatus(TransportProtos.ResponseStatus.NOT_FOUND);
|
builder.setResponseStatus(TransportProtos.ResponseStatus.NOT_FOUND);
|
||||||
} else {
|
} 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);
|
builder.setResponseStatus(TransportProtos.ResponseStatus.NOT_FOUND);
|
||||||
} else {
|
} else {
|
||||||
builder.setResponseStatus(TransportProtos.ResponseStatus.SUCCESS);
|
builder.setResponseStatus(TransportProtos.ResponseStatus.SUCCESS);
|
||||||
builder.setFirmwareIdMSB(firmwareId.getId().getMostSignificantBits());
|
builder.setFirmwareIdMSB(firmwareId.getId().getMostSignificantBits());
|
||||||
builder.setFirmwareIdLSB(firmwareId.getId().getLeastSignificantBits());
|
builder.setFirmwareIdLSB(firmwareId.getId().getLeastSignificantBits());
|
||||||
builder.setTitle(firmware.getTitle());
|
builder.setTitle(firmwareInfo.getTitle());
|
||||||
builder.setVersion(firmware.getVersion());
|
builder.setVersion(firmwareInfo.getVersion());
|
||||||
builder.setFileName(firmware.getFileName());
|
builder.setFileName(firmwareInfo.getFileName());
|
||||||
builder.setContentType(firmware.getContentType());
|
builder.setContentType(firmwareInfo.getContentType());
|
||||||
|
if (!firmwareDataCache.has(firmwareId.toString())) {
|
||||||
|
Firmware firmware = firmwareService.findFirmwareById(tenantId, firmwareId);
|
||||||
firmwareDataCache.put(firmwareId.toString(), firmware.getData().array());
|
firmwareDataCache.put(firmwareId.toString(), firmware.getData().array());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return Futures.immediateFuture(
|
return Futures.immediateFuture(
|
||||||
TransportApiResponseMsg.newBuilder()
|
TransportApiResponseMsg.newBuilder()
|
||||||
|
|||||||
@ -24,4 +24,9 @@ public interface FirmwareDataCache {
|
|||||||
void put(String key, byte[] value);
|
void put(String key, byte[] value);
|
||||||
|
|
||||||
void evict(String key);
|
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 com.google.protobuf.DynamicMessage;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import org.eclipse.californium.core.coap.CoAP;
|
import org.eclipse.californium.core.coap.CoAP;
|
||||||
import org.eclipse.californium.core.coap.Request;
|
import org.eclipse.californium.core.coap.Request;
|
||||||
import org.eclipse.californium.core.coap.Response;
|
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.DataConstants;
|
||||||
import org.thingsboard.server.common.data.DeviceProfile;
|
import org.thingsboard.server.common.data.DeviceProfile;
|
||||||
import org.thingsboard.server.common.data.DeviceTransportType;
|
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.TransportPayloadType;
|
||||||
import org.thingsboard.server.common.data.device.profile.CoapDeviceProfileTransportConfiguration;
|
import org.thingsboard.server.common.data.device.profile.CoapDeviceProfileTransportConfiguration;
|
||||||
import org.thingsboard.server.common.data.device.profile.CoapDeviceTypeConfiguration;
|
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.getResponseStatus().equals(TransportProtos.ResponseStatus.SUCCESS)) {
|
||||||
if (msg.getTitle().equals(title) && msg.getVersion().equals(version)) {
|
if (msg.getTitle().equals(title) && msg.getVersion().equals(version)) {
|
||||||
String firmwareId = new UUID(msg.getFirmwareIdMSB(), msg.getFirmwareIdLSB()).toString();
|
String firmwareId = new UUID(msg.getFirmwareIdMSB(), msg.getFirmwareIdLSB()).toString();
|
||||||
String strChunkSize = exchange.getQueryParameter("chunkSize");
|
String strChunkSize = exchange.getQueryParameter("size");
|
||||||
String strChunk = exchange.getQueryParameter("chunk");
|
String strChunk = exchange.getQueryParameter("chunk");
|
||||||
int chunkSize = StringUtils.isEmpty(strChunkSize) ? 0 : Integer.parseInt(strChunkSize);
|
int chunkSize = StringUtils.isEmpty(strChunkSize) ? 0 : Integer.parseInt(strChunkSize);
|
||||||
int chunk = StringUtils.isEmpty(strChunk) ? 0 : Integer.parseInt(strChunk);
|
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());
|
new TbProtoQueueMsg<>(UUID.randomUUID(), TransportProtos.TransportApiRequestMsg.newBuilder().setFirmwareRequestMsg(msg).build());
|
||||||
|
|
||||||
AsyncCallbackTemplate.withCallback(transportApiRequestTemplate.send(protoMsg), response -> {
|
AsyncCallbackTemplate.withCallback(transportApiRequestTemplate.send(protoMsg), response -> {
|
||||||
TransportProtos.GetFirmwareResponseMsg firmwareResponseMsg = response.getValue().getFirmwareResponseMsg();
|
callback.onSuccess(response.getValue().getFirmwareResponseMsg());
|
||||||
callback.onSuccess(firmwareResponseMsg);
|
|
||||||
}, callback::onError, transportCallbackExecutor);
|
}, callback::onError, transportCallbackExecutor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user