|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import javax.sip.InvalidArgumentException; | 
|---|
|  |  |  | import javax.sip.SipException; | 
|---|
|  |  |  | import javax.sip.TimeoutEvent; | 
|---|
|  |  |  | import java.text.ParseException; | 
|---|
|  |  |  | import java.util.HashMap; | 
|---|
|  |  |  | import java.util.List; | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | final String registerTaskKey = REGISTER_KEY_PREFIX + parentPlatform.getServerGBId(); | 
|---|
|  |  |  | if (dynamicTask.contains(registerTaskKey)) { | 
|---|
|  |  |  | dynamicTask.stop(registerTaskKey); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 添加注册任务 | 
|---|
|  |  |  | dynamicTask.startDelay(registerTaskKey, | 
|---|
|  |  |  | if (!dynamicTask.isAlive(registerTaskKey)) { | 
|---|
|  |  |  | // 添加注册任务 | 
|---|
|  |  |  | dynamicTask.startCron(registerTaskKey, | 
|---|
|  |  |  | // 注册失败(注册成功时由程序直接调用了online方法) | 
|---|
|  |  |  | ()-> { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | commanderForPlatform.register(parentPlatform, eventResult -> offline(parentPlatform),null); | 
|---|
|  |  |  | logger.info("[国标级联] 平台:{}注册即将到期,重新注册", parentPlatform.getServerGBId()); | 
|---|
|  |  |  | commanderForPlatform.register(parentPlatform, eventResult -> { | 
|---|
|  |  |  | offline(parentPlatform, false); | 
|---|
|  |  |  | },null); | 
|---|
|  |  |  | } catch (InvalidArgumentException | ParseException | SipException e) { | 
|---|
|  |  |  | logger.error("[命令发送失败] 国标级联定时注册: {}", e.getMessage()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | (parentPlatform.getExpires() - 10) *1000); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | final String keepaliveTaskKey = KEEPALIVE_KEY_PREFIX + parentPlatform.getServerGBId(); | 
|---|
|  |  |  | if (!dynamicTask.contains(keepaliveTaskKey)) { | 
|---|
|  |  |  | 
|---|
|  |  |  | // 此时是第三次心跳超时, 平台离线 | 
|---|
|  |  |  | if (platformCatch.getKeepAliveReply()  == 2) { | 
|---|
|  |  |  | // 设置平台离线,并重新注册 | 
|---|
|  |  |  | offline(parentPlatform); | 
|---|
|  |  |  | logger.info("[国标级联] {},三次心跳超时后再次发起注册", parentPlatform.getServerGBId()); | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | commanderForPlatform.register(parentPlatform, eventResult1 -> { | 
|---|
|  |  |  | logger.info("[国标级联] {},三次心跳超时后再次发起注册仍然失败,开始定时发起注册,间隔为1分钟", parentPlatform.getServerGBId()); | 
|---|
|  |  |  | // 添加注册任务 | 
|---|
|  |  |  | dynamicTask.startCron(registerTaskKey, | 
|---|
|  |  |  | // 注册失败(注册成功时由程序直接调用了online方法) | 
|---|
|  |  |  | ()->logger.info("[国标级联] {},平台离线后持续发起注册,失败", parentPlatform.getServerGBId()), | 
|---|
|  |  |  | 60*1000); | 
|---|
|  |  |  | offline(parentPlatform, false); | 
|---|
|  |  |  | }, null); | 
|---|
|  |  |  | } catch (InvalidArgumentException | ParseException | SipException e) { | 
|---|
|  |  |  | logger.error("[命令发送失败] 国标级联 注册: {}", e.getMessage()); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void offline(ParentPlatform parentPlatform) { | 
|---|
|  |  |  | public void offline(ParentPlatform parentPlatform, boolean stopRegister) { | 
|---|
|  |  |  | logger.info("[平台离线]:{}", parentPlatform.getServerGBId()); | 
|---|
|  |  |  | ParentPlatformCatch parentPlatformCatch = redisCatchStorage.queryPlatformCatchInfo(parentPlatform.getServerGBId()); | 
|---|
|  |  |  | parentPlatformCatch.setKeepAliveReply(0); | 
|---|
|  |  |  | 
|---|
|  |  |  | // 停止所有推流 | 
|---|
|  |  |  | logger.info("[平台离线] {}, 停止所有推流", parentPlatform.getServerGBId()); | 
|---|
|  |  |  | stopAllPush(parentPlatform.getServerGBId()); | 
|---|
|  |  |  | // 清除注册定时 | 
|---|
|  |  |  | logger.info("[平台离线] {}, 停止定时注册任务", parentPlatform.getServerGBId()); | 
|---|
|  |  |  | final String registerTaskKey = REGISTER_KEY_PREFIX + parentPlatform.getServerGBId(); | 
|---|
|  |  |  | if (dynamicTask.contains(registerTaskKey)) { | 
|---|
|  |  |  | dynamicTask.stop(registerTaskKey); | 
|---|
|  |  |  | if (stopRegister) { | 
|---|
|  |  |  | // 清除注册定时 | 
|---|
|  |  |  | logger.info("[平台离线] {}, 停止定时注册任务", parentPlatform.getServerGBId()); | 
|---|
|  |  |  | final String registerTaskKey = REGISTER_KEY_PREFIX + parentPlatform.getServerGBId(); | 
|---|
|  |  |  | if (dynamicTask.contains(registerTaskKey)) { | 
|---|
|  |  |  | dynamicTask.stop(registerTaskKey); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 清除心跳定时 | 
|---|
|  |  |  | logger.info("[平台离线] {}, 停止定时发送心跳任务", parentPlatform.getServerGBId()); | 
|---|