SubscribeHolder.java 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  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. private final String taskOverduePrefix = "subscribe_overdue_";
  22. private static ConcurrentHashMap<String, SubscribeInfo> catalogMap = new ConcurrentHashMap<>();
  23. private static ConcurrentHashMap<String, SubscribeInfo> mobilePositionMap = new ConcurrentHashMap<>();
  24. public void putCatalogSubscribe(String platformId, SubscribeInfo subscribeInfo) {
  25. catalogMap.put(platformId, subscribeInfo);
  26. if (subscribeInfo.getExpires() > 0) {
  27. // 添加订阅到期
  28. String taskOverdueKey = taskOverduePrefix + "catalog_" + platformId;
  29. // 添加任务处理订阅过期
  30. dynamicTask.startDelay(taskOverdueKey, () -> removeCatalogSubscribe(subscribeInfo.getId()),
  31. subscribeInfo.getExpires() * 1000);
  32. }
  33. }
  34. public SubscribeInfo getCatalogSubscribe(String platformId) {
  35. return catalogMap.get(platformId);
  36. }
  37. public void removeCatalogSubscribe(String platformId) {
  38. catalogMap.remove(platformId);
  39. String taskOverdueKey = taskOverduePrefix + "catalog_" + platformId;
  40. Runnable runnable = dynamicTask.get(taskOverdueKey);
  41. if (runnable instanceof ISubscribeTask) {
  42. ISubscribeTask subscribeTask = (ISubscribeTask) runnable;
  43. subscribeTask.stop(null);
  44. }
  45. // 添加任务处理订阅过期
  46. dynamicTask.stop(taskOverdueKey);
  47. }
  48. public void putMobilePositionSubscribe(String platformId, SubscribeInfo subscribeInfo, Runnable gpsTask) {
  49. mobilePositionMap.put(platformId, subscribeInfo);
  50. String key = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + userSetting.getServerId() + "MobilePosition_" + platformId;
  51. // 添加任务处理GPS定时推送
  52. dynamicTask.startCron(key, gpsTask,
  53. subscribeInfo.getGpsInterval() * 1000);
  54. String taskOverdueKey = taskOverduePrefix + "MobilePosition_" + platformId;
  55. if (subscribeInfo.getExpires() > 0) {
  56. // 添加任务处理订阅过期
  57. dynamicTask.startDelay(taskOverdueKey, () -> {
  58. removeMobilePositionSubscribe(subscribeInfo.getId());
  59. },
  60. subscribeInfo.getExpires() * 1000);
  61. }
  62. }
  63. public SubscribeInfo getMobilePositionSubscribe(String platformId) {
  64. return mobilePositionMap.get(platformId);
  65. }
  66. public void removeMobilePositionSubscribe(String platformId) {
  67. mobilePositionMap.remove(platformId);
  68. String key = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + userSetting.getServerId() + "MobilePosition_" + platformId;
  69. // 结束任务处理GPS定时推送
  70. dynamicTask.stop(key);
  71. String taskOverdueKey = taskOverduePrefix + "MobilePosition_" + platformId;
  72. Runnable runnable = dynamicTask.get(taskOverdueKey);
  73. if (runnable instanceof ISubscribeTask) {
  74. ISubscribeTask subscribeTask = (ISubscribeTask) runnable;
  75. subscribeTask.stop(null);
  76. }
  77. // 添加任务处理订阅过期
  78. dynamicTask.stop(taskOverdueKey);
  79. }
  80. public List<String> getAllCatalogSubscribePlatform() {
  81. List<String> platforms = new ArrayList<>();
  82. if(catalogMap.size() > 0) {
  83. for (String key : catalogMap.keySet()) {
  84. platforms.add(catalogMap.get(key).getId());
  85. }
  86. }
  87. return platforms;
  88. }
  89. public List<String> getAllMobilePositionSubscribePlatform() {
  90. List<String> platforms = new ArrayList<>();
  91. if(!mobilePositionMap.isEmpty()) {
  92. for (String key : mobilePositionMap.keySet()) {
  93. platforms.add(mobilePositionMap.get(key).getId());
  94. }
  95. }
  96. return platforms;
  97. }
  98. public void removeAllSubscribe(String platformId) {
  99. removeMobilePositionSubscribe(platformId);
  100. removeCatalogSubscribe(platformId);
  101. }
  102. }