SubscribeHolder.java 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package com.genersoft.iot.vmp.gb28181.bean;
  2. import com.genersoft.iot.vmp.common.VideoManagerConstants;
  3. import com.genersoft.iot.vmp.conf.DynamicTask;
  4. import com.genersoft.iot.vmp.gb28181.task.impl.MobilePositionSubscribeHandlerTask;
  5. import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
  6. import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
  7. import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.stereotype.Component;
  10. import java.util.ArrayList;
  11. import java.util.List;
  12. import java.util.concurrent.ConcurrentHashMap;
  13. @Component
  14. public class SubscribeHolder {
  15. @Autowired
  16. private DynamicTask dynamicTask;
  17. @Autowired
  18. private IRedisCatchStorage redisCatchStorage;
  19. @Autowired
  20. private ISIPCommanderForPlatform sipCommanderForPlatform;
  21. @Autowired
  22. private IVideoManagerStorage storager;
  23. private final String taskOverduePrefix = "subscribe_overdue_";
  24. private static ConcurrentHashMap<String, SubscribeInfo> catalogMap = new ConcurrentHashMap<>();
  25. private static ConcurrentHashMap<String, SubscribeInfo> mobilePositionMap = new ConcurrentHashMap<>();
  26. public void putCatalogSubscribe(String platformId, SubscribeInfo subscribeInfo) {
  27. catalogMap.put(platformId, subscribeInfo);
  28. // 添加订阅到期
  29. String taskOverdueKey = taskOverduePrefix + "catalog_" + platformId;
  30. dynamicTask.stop(taskOverdueKey);
  31. // 添加任务处理订阅过期
  32. dynamicTask.startDelay(taskOverdueKey, () -> removeCatalogSubscribe(subscribeInfo.getId()),
  33. subscribeInfo.getExpires() * 1000);
  34. }
  35. public SubscribeInfo getCatalogSubscribe(String platformId) {
  36. return catalogMap.get(platformId);
  37. }
  38. public void removeCatalogSubscribe(String platformId) {
  39. catalogMap.remove(platformId);
  40. String taskOverdueKey = taskOverduePrefix + "catalog_" + platformId;
  41. // 添加任务处理订阅过期
  42. dynamicTask.stop(taskOverdueKey);
  43. }
  44. public void putMobilePositionSubscribe(String platformId, SubscribeInfo subscribeInfo) {
  45. mobilePositionMap.put(platformId, subscribeInfo);
  46. String key = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + "MobilePosition_" + platformId;
  47. // 添加任务处理GPS定时推送
  48. dynamicTask.startCron(key, new MobilePositionSubscribeHandlerTask(redisCatchStorage, sipCommanderForPlatform,
  49. storager, platformId, subscribeInfo.getSn(), key, this, dynamicTask),
  50. subscribeInfo.getGpsInterval() * 1000);
  51. String taskOverdueKey = taskOverduePrefix + "MobilePosition_" + platformId;
  52. dynamicTask.stop(taskOverdueKey);
  53. // 添加任务处理订阅过期
  54. dynamicTask.startDelay(taskOverdueKey, () -> {
  55. removeMobilePositionSubscribe(subscribeInfo.getId());
  56. },
  57. subscribeInfo.getExpires() * 1000);
  58. }
  59. public SubscribeInfo getMobilePositionSubscribe(String platformId) {
  60. return mobilePositionMap.get(platformId);
  61. }
  62. public void removeMobilePositionSubscribe(String platformId) {
  63. mobilePositionMap.remove(platformId);
  64. String key = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + "MobilePosition_" + platformId;
  65. // 结束任务处理GPS定时推送
  66. dynamicTask.stop(key);
  67. String taskOverdueKey = taskOverduePrefix + "MobilePosition_" + platformId;
  68. // 添加任务处理订阅过期
  69. dynamicTask.stop(taskOverdueKey);
  70. }
  71. public List<String> getAllCatalogSubscribePlatform() {
  72. List<String> platforms = new ArrayList<>();
  73. if(catalogMap.size() > 0) {
  74. for (String key : catalogMap.keySet()) {
  75. platforms.add(catalogMap.get(key).getId());
  76. }
  77. }
  78. return platforms;
  79. }
  80. public void removeAllSubscribe(String platformId) {
  81. removeMobilePositionSubscribe(platformId);
  82. removeCatalogSubscribe(platformId);
  83. }
  84. }