panlinlin
2020-12-28 00e61d9a80b5b013a75d1ce567dc997694577a45
src/main/java/com/genersoft/iot/vmp/vmanager/device/DeviceController.java
@@ -4,6 +4,7 @@
import com.genersoft.iot.vmp.common.PageResult;
import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -18,6 +19,8 @@
import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
import javax.sip.message.Response;
@CrossOrigin
@RestController
@@ -66,7 +69,7 @@
    * @param count 每页条数
    * @return 通道列表
    */
   @GetMapping("devices/{deviceId}/channels")
   @GetMapping("/devices/{deviceId}/channels")
   public ResponseEntity<PageResult> channels(@PathVariable String deviceId,
                                    int page, int count,
                                    @RequestParam(required = false) String query,
@@ -85,12 +88,26 @@
   public DeferredResult<ResponseEntity<Device>> devicesSync(@PathVariable String deviceId){
      
      if (logger.isDebugEnabled()) {
         logger.debug("设备信息同步API调用,deviceId:" + deviceId);
      }
         logger.debug("设备通道信息同步API调用,deviceId:" + deviceId);
      Device device = storager.queryVideoDevice(deviceId);
        cmder.catalogQuery(device);
        DeferredResult<ResponseEntity<Device>> result = new DeferredResult<ResponseEntity<Device>>();
        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>>(2*1000L);
      result.onTimeout(()->{
         logger.warn(String.format("设备通道信息同步超时"));
         // 释放rtpserver
         RequestMessage msg = new RequestMessage();
         msg.setId(DeferredResultHolder.CALLBACK_CMD_CATALOG+deviceId);
         msg.setData("Timeout");
         resultHolder.invokeResult(msg);
      });
        resultHolder.put(DeferredResultHolder.CALLBACK_CMD_CATALOG+deviceId, result);
        return result;
   }
@@ -123,7 +140,7 @@
    * @param count 每页条数
    * @return 子通道列表
    */
   @GetMapping("subChannels/{deviceId}/{channelId}/channels")
   @GetMapping("/subChannels/{deviceId}/{channelId}/channels")
   public ResponseEntity<PageResult> subChannels(@PathVariable String deviceId,
                                      @PathVariable String channelId,
                                      int page,
@@ -138,10 +155,25 @@
      DeviceChannel deviceChannel = storager.queryChannel(deviceId,channelId);
      if (deviceChannel == null) {
         PageResult<DeviceChannel> deviceChannelPageResult = new PageResult<>();
         new ResponseEntity<>(deviceChannelPageResult,HttpStatus.OK);
         return new ResponseEntity<>(deviceChannelPageResult,HttpStatus.OK);
      }
      PageResult pageResult = storager.querySubChannels(deviceId, channelId, query, channelType, online, page, count);
      return new ResponseEntity<>(pageResult,HttpStatus.OK);
   }
   @PostMapping("/channel/update/{deviceId}")
   public ResponseEntity<PageResult> updateChannel(@PathVariable String deviceId,DeviceChannel channel){
      storager.updateChannel(deviceId, channel);
      return new ResponseEntity<>(null,HttpStatus.OK);
   }
   @GetMapping("/devices/{deviceId}/transport/{streamMode}")
   @PostMapping("/devices/{deviceId}/transport/{streamMode}")
   public ResponseEntity<PageResult> updateTransport(@PathVariable String deviceId, @PathVariable String streamMode){
      Device device = storager.queryVideoDevice(deviceId);
      device.setStreamMode(streamMode);
      storager.updateDevice(device);
      return new ResponseEntity<>(null,HttpStatus.OK);
   }
}