‘sxh’
2023-06-15 15df08964bb459d6d01ec5ef423eae094eac1c72
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java
@@ -1,6 +1,5 @@
package com.genersoft.iot.vmp.gb28181.transmit.callback;
import com.alibaba.fastjson2.JSON;
import com.genersoft.iot.vmp.vmanager.bean.DeferredResultEx;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
@@ -51,6 +50,8 @@
   public static final String CALLBACK_CMD_ALARM = "CALLBACK_ALARM";
   public static final String CALLBACK_CMD_BROADCAST = "CALLBACK_BROADCAST";
   public static final String CALLBACK_CMD_SNAP= "CALLBACK_SNAP";
   private Map<String, Map<String, DeferredResultEx>> map = new ConcurrentHashMap<>();
@@ -130,23 +131,52 @@
      if (deferredResultMap == null) {
         return;
      }
      Set<String> ids = deferredResultMap.keySet();
      for (String id : ids) {
         DeferredResultEx result = deferredResultMap.get(id);
         if (result == null) {
      synchronized (this) {
         deferredResultMap = map.get(msg.getKey());
         if (deferredResultMap == null) {
            return;
         }
         if (result.getFilter() != null) {
            Object handler = result.getFilter().handler(msg.getData());
            System.out.println(JSON.toJSONString(handler));
            result.getDeferredResult().setResult(handler);
         }else {
            result.getDeferredResult().setResult(msg.getData());
         }
         Set<String> ids = deferredResultMap.keySet();
         for (String id : ids) {
            DeferredResultEx result = deferredResultMap.get(id);
            if (result == null) {
               return;
            }
            if (result.getFilter() != null) {
               Object handler = result.getFilter().handler(msg.getData());
               result.getDeferredResult().setResult(handler);
            }else {
               result.getDeferredResult().setResult(msg.getData());
            }
         }
         map.remove(msg.getKey());
      }
      map.remove(msg.getKey());
   }
   /*============================设备主子码流逻辑START========================*/
   public static String getPlayKey(String deviceId,String channelId,boolean deviceSwitchSubStream,boolean isSubStream){
      String key = null;
      if(deviceSwitchSubStream){
         key = CALLBACK_CMD_PLAY + isSubStream + deviceId + channelId;
      }else {
         key = CALLBACK_CMD_PLAY +deviceId + channelId;
      }
      return key;
   }
   public static String getSnapKey(String deviceId,String channelId,boolean deviceSwitchSubStream,boolean isSubStream){
      String key = null;
      if(deviceSwitchSubStream){
         key = CALLBACK_CMD_SNAP + isSubStream + deviceId + channelId;
      }else {
         key = CALLBACK_CMD_SNAP +deviceId + channelId;
      }
      return key;
   }
   /*============================设备主子码流逻辑END========================*/
}