From 3b21f385cdae7d94fce1ebba6abb06a893f57114 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期二, 02 十一月 2021 10:40:29 +0800 Subject: [PATCH] 对需要向设备发起请求的http请求,使用缓存,等待设备请求返回的时候一次性释放所有请求 --- src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java | 80 +++++++++++++++++++++++++++++++-------- 1 files changed, 63 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java index 02894cc..359fcbe 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java @@ -3,6 +3,7 @@ import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; +import com.genersoft.iot.vmp.vmanager.bean.WVPResult; import com.github.pagehelper.PageInfo; import io.swagger.annotations.*; import org.slf4j.Logger; @@ -22,6 +23,8 @@ import com.genersoft.iot.vmp.storager.IVideoManagerStorager; import javax.sip.message.Response; +import java.io.UnsupportedEncodingException; +import java.util.UUID; @Api(tags = "鍥芥爣璁惧鏌ヨ", value = "鍥芥爣璁惧鏌ヨ") @SuppressWarnings("rawtypes") @@ -141,23 +144,32 @@ logger.debug("璁惧閫氶亾淇℃伅鍚屾API璋冪敤锛宒eviceId锛�" + deviceId); } Device device = storager.queryVideoDevice(deviceId); - cmder.catalogQuery(device, event -> { - Response response = event.getResponse(); - RequestMessage msg = new RequestMessage(); - msg.setId(DeferredResultHolder.CALLBACK_CMD_CATALOG+deviceId); - msg.setData(String.format("鍚屾閫氶亾澶辫触锛岄敊璇爜锛� %s, %s", response.getStatusCode(), response.getReasonPhrase())); - resultHolder.invokeResult(msg); - }); - DeferredResult<ResponseEntity<Device>> result = new DeferredResult<ResponseEntity<Device>>(15*1000L); + String key = DeferredResultHolder.CALLBACK_CMD_CATALOG + deviceId; + String uuid = UUID.randomUUID().toString(); + DeferredResult<ResponseEntity<Device>> result = new DeferredResult<ResponseEntity<Device>>(15*1000L); result.onTimeout(()->{ logger.warn(String.format("璁惧閫氶亾淇℃伅鍚屾瓒呮椂")); // 閲婃斁rtpserver RequestMessage msg = new RequestMessage(); - msg.setId(DeferredResultHolder.CALLBACK_CMD_CATALOG+deviceId); + msg.setKey(key); + msg.setId(uuid); msg.setData("Timeout"); - resultHolder.invokeResult(msg); + resultHolder.invokeAllResult(msg); }); - resultHolder.put(DeferredResultHolder.CALLBACK_CMD_CATALOG+deviceId, result); + // 绛夊緟鍏朵粬鐩稿悓璇锋眰杩斿洖鏃朵竴璧疯繑鍥� + if (resultHolder.exist(key, null)) { + return result; + } + cmder.catalogQuery(device, event -> { + Response response = event.getResponse(); + RequestMessage msg = new RequestMessage(); + msg.setKey(key); + msg.setId(uuid); + msg.setData(String.format("鍚屾閫氶亾澶辫触锛岄敊璇爜锛� %s, %s", response.getStatusCode(), response.getReasonPhrase())); + resultHolder.invokeAllResult(msg); + }); + + resultHolder.put(key, uuid, result); return result; } @@ -274,6 +286,32 @@ } /** + * 鏇存柊璁惧淇℃伅 + * @param device 璁惧淇℃伅 + * @return + */ + @ApiOperation("鏇存柊璁惧淇℃伅") + @ApiImplicitParams({ + @ApiImplicitParam(name = "device", value = "璁惧淇℃伅", required = true, dataTypeClass = Device.class) + }) + @PostMapping("/device/update/") + public ResponseEntity<WVPResult<String>> updateDevice(Device device){ + + if (device != null && device.getDeviceId() != null) { + Device deviceInStore = storager.queryVideoDevice(device.getDeviceId()); + if (!StringUtils.isEmpty(device.getName())) deviceInStore.setName(device.getName()); + if (!StringUtils.isEmpty(device.getCharset())) deviceInStore.setCharset(device.getCharset()); + if (!StringUtils.isEmpty(device.getMediaServerId())) deviceInStore.setMediaServerId(device.getMediaServerId()); + storager.updateDevice(deviceInStore); + cmder.deviceInfoQuery(deviceInStore); + } + WVPResult<String> result = new WVPResult<>(); + result.setCode(0); + result.setMsg("success"); + return new ResponseEntity<>(result,HttpStatus.OK); + } + + /** * 璁惧鐘舵�佹煡璇㈣姹侫PI鎺ュ彛 * * @param deviceId 璁惧id @@ -288,10 +326,13 @@ logger.debug("璁惧鐘舵�佹煡璇PI璋冪敤"); } Device device = storager.queryVideoDevice(deviceId); + String uuid = UUID.randomUUID().toString(); + String key = DeferredResultHolder.CALLBACK_CMD_DEVICESTATUS + deviceId; cmder.deviceStatusQuery(device, event -> { Response response = event.getResponse(); RequestMessage msg = new RequestMessage(); - msg.setId(DeferredResultHolder.CALLBACK_CMD_DEVICESTATUS + deviceId); + msg.setId(uuid); + msg.setKey(key); msg.setData(String.format("鑾峰彇璁惧鐘舵�佸け璐ワ紝閿欒鐮侊細 %s, %s", response.getStatusCode(), response.getReasonPhrase())); resultHolder.invokeResult(msg); }); @@ -300,11 +341,12 @@ logger.warn(String.format("鑾峰彇璁惧鐘舵�佽秴鏃�")); // 閲婃斁rtpserver RequestMessage msg = new RequestMessage(); - msg.setId(DeferredResultHolder.CALLBACK_CMD_DEVICESTATUS + deviceId); + msg.setId(uuid); + msg.setKey(key); msg.setData("Timeout. Device did not response to this command."); resultHolder.invokeResult(msg); }); - resultHolder.put(DeferredResultHolder.CALLBACK_CMD_DEVICESTATUS + deviceId, result); + resultHolder.put(DeferredResultHolder.CALLBACK_CMD_DEVICESTATUS + deviceId, uuid, result); return result; } @@ -341,10 +383,13 @@ logger.debug("璁惧鎶ヨ鏌ヨAPI璋冪敤"); } Device device = storager.queryVideoDevice(deviceId); + String key = DeferredResultHolder.CALLBACK_CMD_ALARM + deviceId; + String uuid = UUID.randomUUID().toString(); cmder.alarmInfoQuery(device, startPriority, endPriority, alarmMethod, alarmType, startTime, endTime, event -> { Response response = event.getResponse(); RequestMessage msg = new RequestMessage(); - msg.setId(DeferredResultHolder.CALLBACK_CMD_ALARM + deviceId); + msg.setId(uuid); + msg.setKey(key); msg.setData(String.format("璁惧鎶ヨ鏌ヨ澶辫触锛岄敊璇爜锛� %s, %s", response.getStatusCode(), response.getReasonPhrase())); resultHolder.invokeResult(msg); }); @@ -353,11 +398,12 @@ logger.warn(String.format("璁惧鎶ヨ鏌ヨ瓒呮椂")); // 閲婃斁rtpserver RequestMessage msg = new RequestMessage(); - msg.setId(DeferredResultHolder.CALLBACK_CMD_ALARM + deviceId); + msg.setId(uuid); + msg.setKey(key); msg.setData("璁惧鎶ヨ鏌ヨ瓒呮椂"); resultHolder.invokeResult(msg); }); - resultHolder.put(DeferredResultHolder.CALLBACK_CMD_ALARM + deviceId, result); + resultHolder.put(DeferredResultHolder.CALLBACK_CMD_ALARM + deviceId, uuid, result); return result; } -- Gitblit v1.8.0