SubscribeHolder.java 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  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.conf.UserSetting;
  5. import com.genersoft.iot.vmp.gb28181.task.ISubscribeTask;
  6. import com.genersoft.iot.vmp.service.IPlatformService;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.stereotype.Component;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11. import java.util.concurrent.ConcurrentHashMap;
  12. /**
  13. * @author lin
  14. */
  15. @Component
  16. public class SubscribeHolder {
  17. @Autowired
  18. private DynamicTask dynamicTask;
  19. @Autowired
  20. private UserSetting userSetting;
  21. @Autowired
  22. private IPlatformService platformService;
  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. if (subscribeInfo.getExpires() > 0) {
  29. // 添加订阅到期
  30. String taskOverdueKey = taskOverduePrefix + "catalog_" + platformId;
  31. // 添加任务处理订阅过期
  32. dynamicTask.startDelay(taskOverdueKey, () -> removeCatalogSubscribe(subscribeInfo.getId()),
  33. subscribeInfo.getExpires() * 1000);
  34. }
  35. }
  36. public SubscribeInfo getCatalogSubscribe(String platformId) {
  37. return catalogMap.get(platformId);
  38. }
  39. public void removeCatalogSubscribe(String platformId) {
  40. catalogMap.remove(platformId);
  41. String taskOverdueKey = taskOverduePrefix + "catalog_" + platformId;
  42. Runnable runnable = dynamicTask.get(taskOverdueKey);
  43. if (runnable instanceof ISubscribeTask) {
  44. ISubscribeTask subscribeTask = (ISubscribeTask) runnable;
  45. subscribeTask.stop(null);
  46. }
  47. // 添加任务处理订阅过期
  48. dynamicTask.stop(taskOverdueKey);
  49. }
  50. public void putMobilePositionSubscribe(String platformId, SubscribeInfo subscribeInfo) {
  51. mobilePositionMap.put(platformId, subscribeInfo);
  52. String key = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + userSetting.getServerId() + "MobilePosition_" + platformId;
  53. // 添加任务处理GPS定时推送
  54. dynamicTask.startCron(key, ()->{
  55. platformService.sendNotifyMobilePosition(platformId);
  56. },
  57. subscribeInfo.getGpsInterval() * 1000);
  58. String taskOverdueKey = taskOverduePrefix + "MobilePosition_" + platformId;
  59. if (subscribeInfo.getExpires() > 0) {
  60. // 添加任务处理订阅过期
  61. dynamicTask.startDelay(taskOverdueKey, () -> {
  62. removeMobilePositionSubscribe(subscribeInfo.getId());
  63. },
  64. subscribeInfo.getExpires() * 1000);
  65. }
  66. }
  67. public SubscribeInfo getMobilePositionSubscribe(String platformId) {
  68. return mobilePositionMap.get(platformId);
  69. }
  70. public void removeMobilePositionSubscribe(String platformId) {
  71. mobilePositionMap.remove(platformId);
  72. String key = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + userSetting.getServerId() + "MobilePosition_" + platformId;
  73. // 结束任务处理GPS定时推送
  74. dynamicTask.stop(key);
  75. String taskOverdueKey = taskOverduePrefix + "MobilePosition_" + platformId;
  76. Runnable runnable = dynamicTask.get(taskOverdueKey);
  77. if (runnable instanceof ISubscribeTask) {
  78. ISubscribeTask subscribeTask = (ISubscribeTask) runnable;
  79. subscribeTask.stop(null);
  80. }
  81. // 添加任务处理订阅过期
  82. dynamicTask.stop(taskOverdueKey);
  83. }
  84. public List<String> getAllCatalogSubscribePlatform() {
  85. List<String> platforms = new ArrayList<>();
  86. if(catalogMap.size() > 0) {
  87. for (String key : catalogMap.keySet()) {
  88. platforms.add(catalogMap.get(key).getId());
  89. }
  90. }
  91. return platforms;
  92. }
  93. public List<String> getAllMobilePositionSubscribePlatform() {
  94. List<String> platforms = new ArrayList<>();
  95. if(!mobilePositionMap.isEmpty()) {
  96. for (String key : mobilePositionMap.keySet()) {
  97. platforms.add(mobilePositionMap.get(key).getId());
  98. }
  99. }
  100. return platforms;
  101. }
  102. public void removeAllSubscribe(String platformId) {
  103. removeMobilePositionSubscribe(platformId);
  104. removeCatalogSubscribe(platformId);
  105. }
  106. }