|  |  | 
 |  |  |  | 
 |  |  | import com.genersoft.iot.vmp.common.VideoManagerConstants; | 
 |  |  | import com.genersoft.iot.vmp.conf.DynamicTask; | 
 |  |  | import com.genersoft.iot.vmp.gb28181.task.ISubscribeTask; | 
 |  |  | import com.genersoft.iot.vmp.gb28181.task.impl.MobilePositionSubscribeHandlerTask; | 
 |  |  | import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform; | 
 |  |  | import com.genersoft.iot.vmp.service.IPlatformService; | 
 |  |  | import com.genersoft.iot.vmp.storager.IRedisCatchStorage; | 
 |  |  | import com.genersoft.iot.vmp.storager.IVideoManagerStorage; | 
 |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
 |  |  | 
 |  |  | import java.util.List; | 
 |  |  | import java.util.concurrent.ConcurrentHashMap; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * @author lin | 
 |  |  |  */ | 
 |  |  | @Component | 
 |  |  | public class SubscribeHolder { | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private DynamicTask dynamicTask; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private IRedisCatchStorage redisCatchStorage; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private ISIPCommanderForPlatform sipCommanderForPlatform; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private IVideoManagerStorage storager; | 
 |  |  |  | 
 |  |  |     private final String taskOverduePrefix = "subscribe_overdue_"; | 
 |  |  |  | 
 |  |  | 
 |  |  |         catalogMap.put(platformId, subscribeInfo); | 
 |  |  |         // 添加订阅到期 | 
 |  |  |         String taskOverdueKey = taskOverduePrefix +  "catalog_" + platformId; | 
 |  |  |         dynamicTask.stop(taskOverdueKey); | 
 |  |  |         // 添加任务处理订阅过期 | 
 |  |  |         dynamicTask.startDelay(taskOverdueKey, () -> removeCatalogSubscribe(subscribeInfo.getId()), | 
 |  |  |                 subscribeInfo.getExpires() * 1000); | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void removeCatalogSubscribe(String platformId) { | 
 |  |  |  | 
 |  |  |         catalogMap.remove(platformId); | 
 |  |  |         String taskOverdueKey = taskOverduePrefix +  "catalog_" + platformId; | 
 |  |  |         Runnable runnable = dynamicTask.get(taskOverdueKey); | 
 |  |  |         if (runnable instanceof ISubscribeTask) { | 
 |  |  |             ISubscribeTask subscribeTask = (ISubscribeTask) runnable; | 
 |  |  |             subscribeTask.stop(); | 
 |  |  |         } | 
 |  |  |         // 添加任务处理订阅过期 | 
 |  |  |         dynamicTask.stop(taskOverdueKey); | 
 |  |  |     } | 
 |  |  | 
 |  |  |         mobilePositionMap.put(platformId, subscribeInfo); | 
 |  |  |         String key = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX +  "MobilePosition_" + platformId; | 
 |  |  |         // 添加任务处理GPS定时推送 | 
 |  |  |         dynamicTask.startCron(key, new MobilePositionSubscribeHandlerTask(redisCatchStorage, sipCommanderForPlatform, storager,  platformId, subscribeInfo.getSn(), key, this), subscribeInfo.getGpsInterval()); | 
 |  |  |         dynamicTask.startCron(key, new MobilePositionSubscribeHandlerTask(platformId), | 
 |  |  |                 subscribeInfo.getGpsInterval() * 1000); | 
 |  |  |         String taskOverdueKey = taskOverduePrefix +  "MobilePosition_" + platformId; | 
 |  |  |         dynamicTask.stop(taskOverdueKey); | 
 |  |  |         // 添加任务处理订阅过期 | 
 |  |  |         dynamicTask.startDelay(taskOverdueKey, () -> { | 
 |  |  |                     System.out.println("订阅过期"); | 
 |  |  |                     removeMobilePositionSubscribe(subscribeInfo.getId()); | 
 |  |  |                 }, | 
 |  |  |                 subscribeInfo.getExpires() * 1000); | 
 |  |  | 
 |  |  |         // 结束任务处理GPS定时推送 | 
 |  |  |         dynamicTask.stop(key); | 
 |  |  |         String taskOverdueKey = taskOverduePrefix +  "MobilePosition_" + platformId; | 
 |  |  |         Runnable runnable = dynamicTask.get(taskOverdueKey); | 
 |  |  |         if (runnable instanceof ISubscribeTask) { | 
 |  |  |             ISubscribeTask subscribeTask = (ISubscribeTask) runnable; | 
 |  |  |             subscribeTask.stop(); | 
 |  |  |         } | 
 |  |  |         // 添加任务处理订阅过期 | 
 |  |  |         dynamicTask.stop(taskOverdueKey); | 
 |  |  |     } |