Commit bf8fb0c51f4e7894a62636dede6c69a2a85d8458
1 parent
39078225
添加级联平台自动注册时失败自动重新注册
Showing
4 changed files
with
34 additions
and
11 deletions
src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEventLister.java
| @@ -2,6 +2,7 @@ package com.genersoft.iot.vmp.gb28181.event.platformNotRegister; | @@ -2,6 +2,7 @@ package com.genersoft.iot.vmp.gb28181.event.platformNotRegister; | ||
| 2 | 2 | ||
| 3 | import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; | 3 | import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; |
| 4 | import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem; | 4 | import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem; |
| 5 | +import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; | ||
| 5 | import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform; | 6 | import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform; |
| 6 | import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory; | 7 | import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory; |
| 7 | import com.genersoft.iot.vmp.storager.IRedisCatchStorage; | 8 | import com.genersoft.iot.vmp.storager.IRedisCatchStorage; |
| @@ -12,9 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired; | @@ -12,9 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired; | ||
| 12 | import org.springframework.context.ApplicationListener; | 13 | import org.springframework.context.ApplicationListener; |
| 13 | import org.springframework.stereotype.Component; | 14 | import org.springframework.stereotype.Component; |
| 14 | 15 | ||
| 15 | -import java.util.HashMap; | ||
| 16 | -import java.util.List; | ||
| 17 | -import java.util.Map; | 16 | +import java.util.*; |
| 18 | 17 | ||
| 19 | /** | 18 | /** |
| 20 | * @Description: 平台未注册事件,来源有二: | 19 | * @Description: 平台未注册事件,来源有二: |
| @@ -77,6 +76,20 @@ public class PlatformNotRegisterEventLister implements ApplicationListener<Platf | @@ -77,6 +76,20 @@ public class PlatformNotRegisterEventLister implements ApplicationListener<Platf | ||
| 77 | zlmrtpServerFactory.stopSendRtpStream(param); | 76 | zlmrtpServerFactory.stopSendRtpStream(param); |
| 78 | 77 | ||
| 79 | } | 78 | } |
| 80 | - sipCommanderFroPlatform.register(parentPlatform); | 79 | + |
| 80 | + Timer timer = new Timer(); | ||
| 81 | + SipSubscribe.Event okEvent = (responseEvent)->{ | ||
| 82 | + timer.cancel(); | ||
| 83 | + }; | ||
| 84 | + logger.info("向平台注册,平台国标ID:" + event.getPlatformGbID()); | ||
| 85 | + sipCommanderFroPlatform.register(parentPlatform, null, okEvent); | ||
| 86 | + // 设置注册失败则每隔15秒发起一次注册 | ||
| 87 | + timer.schedule(new TimerTask() { | ||
| 88 | + @Override | ||
| 89 | + public void run() { | ||
| 90 | + logger.info("再次向平台注册,平台国标ID:" + event.getPlatformGbID()); | ||
| 91 | + sipCommanderFroPlatform.register(parentPlatform, null, okEvent); | ||
| 92 | + } | ||
| 93 | + }, 15000, 15000);//十五秒后再次发起注册 | ||
| 81 | } | 94 | } |
| 82 | } | 95 | } |
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java
| @@ -13,7 +13,7 @@ public interface ISIPCommanderForPlatform { | @@ -13,7 +13,7 @@ public interface ISIPCommanderForPlatform { | ||
| 13 | * @param parentPlatform | 13 | * @param parentPlatform |
| 14 | * @return | 14 | * @return |
| 15 | */ | 15 | */ |
| 16 | - boolean register(ParentPlatform parentPlatform); | 16 | + boolean register(ParentPlatform parentPlatform, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent); |
| 17 | boolean register(ParentPlatform parentPlatform, String callId, WWWAuthenticateHeader www, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent); | 17 | boolean register(ParentPlatform parentPlatform, String callId, WWWAuthenticateHeader www, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent); |
| 18 | 18 | ||
| 19 | /** | 19 | /** |
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
| @@ -7,6 +7,8 @@ import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; | @@ -7,6 +7,8 @@ import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; | ||
| 7 | import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform; | 7 | import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform; |
| 8 | import com.genersoft.iot.vmp.gb28181.transmit.cmd.SIPRequestHeaderPlarformProvider; | 8 | import com.genersoft.iot.vmp.gb28181.transmit.cmd.SIPRequestHeaderPlarformProvider; |
| 9 | import com.genersoft.iot.vmp.storager.IRedisCatchStorage; | 9 | import com.genersoft.iot.vmp.storager.IRedisCatchStorage; |
| 10 | +import org.slf4j.Logger; | ||
| 11 | +import org.slf4j.LoggerFactory; | ||
| 10 | import org.springframework.beans.factory.annotation.Autowired; | 12 | import org.springframework.beans.factory.annotation.Autowired; |
| 11 | import org.springframework.beans.factory.annotation.Qualifier; | 13 | import org.springframework.beans.factory.annotation.Qualifier; |
| 12 | import org.springframework.beans.factory.annotation.Value; | 14 | import org.springframework.beans.factory.annotation.Value; |
| @@ -20,12 +22,16 @@ import javax.sip.header.CallIdHeader; | @@ -20,12 +22,16 @@ import javax.sip.header.CallIdHeader; | ||
| 20 | import javax.sip.header.WWWAuthenticateHeader; | 22 | import javax.sip.header.WWWAuthenticateHeader; |
| 21 | import javax.sip.message.Request; | 23 | import javax.sip.message.Request; |
| 22 | import java.text.ParseException; | 24 | import java.text.ParseException; |
| 25 | +import java.util.Timer; | ||
| 26 | +import java.util.TimerTask; | ||
| 23 | import java.util.UUID; | 27 | import java.util.UUID; |
| 24 | 28 | ||
| 25 | @Component | 29 | @Component |
| 26 | @DependsOn("sipLayer") | 30 | @DependsOn("sipLayer") |
| 27 | public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform { | 31 | public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform { |
| 28 | 32 | ||
| 33 | + private final Logger logger = LoggerFactory.getLogger(SIPCommanderFroPlatform.class); | ||
| 34 | + | ||
| 29 | // @Autowired | 35 | // @Autowired |
| 30 | // private SipConfig sipConfig; | 36 | // private SipConfig sipConfig; |
| 31 | 37 | ||
| @@ -61,8 +67,8 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform { | @@ -61,8 +67,8 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform { | ||
| 61 | private boolean rtpEnable; | 67 | private boolean rtpEnable; |
| 62 | 68 | ||
| 63 | @Override | 69 | @Override |
| 64 | - public boolean register(ParentPlatform parentPlatform) { | ||
| 65 | - return register(parentPlatform, null, null, null, null); | 70 | + public boolean register(ParentPlatform parentPlatform, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent) { |
| 71 | + return register(parentPlatform, null, null, errorEvent, okEvent); | ||
| 66 | } | 72 | } |
| 67 | 73 | ||
| 68 | @Override | 74 | @Override |
| @@ -95,13 +101,17 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform { | @@ -95,13 +101,17 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform { | ||
| 95 | // 将 callid 写入缓存, 等注册成功可以更新状态 | 101 | // 将 callid 写入缓存, 等注册成功可以更新状态 |
| 96 | redisCatchStorage.updatePlatformRegisterInfo(callIdHeader.getCallId(), parentPlatform.getServerGBId()); | 102 | redisCatchStorage.updatePlatformRegisterInfo(callIdHeader.getCallId(), parentPlatform.getServerGBId()); |
| 97 | 103 | ||
| 98 | - CallIdHeader finalCallIdHeader = callIdHeader; | ||
| 99 | sipSubscribe.addErrorSubscribe(callIdHeader.getCallId(), (event)->{ | 104 | sipSubscribe.addErrorSubscribe(callIdHeader.getCallId(), (event)->{ |
| 100 | - redisCatchStorage.delPlatformRegisterInfo(finalCallIdHeader.getCallId()); | ||
| 101 | - if (errorEvent != null) { | 105 | + if (event != null) { |
| 106 | + logger.info("向上级平台 [ {} ] 注册发上错误: {} ", | ||
| 107 | + parentPlatform.getServerGBId(), | ||
| 108 | + event.getResponse().getReasonPhrase()); | ||
| 109 | + } | ||
| 110 | + if (errorEvent != null ) { | ||
| 102 | errorEvent.response(event); | 111 | errorEvent.response(event); |
| 103 | } | 112 | } |
| 104 | }); | 113 | }); |
| 114 | + | ||
| 105 | }else { | 115 | }else { |
| 106 | CallIdHeader callIdHeader = parentPlatform.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId() | 116 | CallIdHeader callIdHeader = parentPlatform.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId() |
| 107 | : udpSipProvider.getNewCallId(); | 117 | : udpSipProvider.getNewCallId(); |
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java
| @@ -119,7 +119,7 @@ public class PlatformController { | @@ -119,7 +119,7 @@ public class PlatformController { | ||
| 119 | // 保存时启用就发送注册 | 119 | // 保存时启用就发送注册 |
| 120 | if (parentPlatform.isEnable()) { | 120 | if (parentPlatform.isEnable()) { |
| 121 | // 只要保存就发送注册 | 121 | // 只要保存就发送注册 |
| 122 | - commanderForPlatform.register(parentPlatform); | 122 | + commanderForPlatform.register(parentPlatform, null, null); |
| 123 | } else if (parentPlatformOld != null && parentPlatformOld.isEnable() && !parentPlatform.isEnable()){ // 关闭启用时注销 | 123 | } else if (parentPlatformOld != null && parentPlatformOld.isEnable() && !parentPlatform.isEnable()){ // 关闭启用时注销 |
| 124 | commanderForPlatform.unregister(parentPlatform, null, null); | 124 | commanderForPlatform.unregister(parentPlatform, null, null); |
| 125 | } | 125 | } |