648540858
2022-10-18 1af77ab5f7c11a4b3d59c1989b51b9fca29679ce
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java
@@ -29,6 +29,9 @@
import org.springframework.web.bind.annotation.*;
import com.genersoft.iot.vmp.conf.SipConfig;
import javax.sip.InvalidArgumentException;
import javax.sip.SipException;
import java.text.ParseException;
import java.util.List;
/**
@@ -212,20 +215,37 @@
            // 保存时启用就发送注册
            if (parentPlatform.isEnable()) {
                if (parentPlatformOld != null && parentPlatformOld.isStatus()) {
                    commanderForPlatform.unregister(parentPlatformOld, null, null);
                    try {
                        commanderForPlatform.unregister(parentPlatformOld, null, null);
                    } catch (InvalidArgumentException | ParseException | SipException e) {
                        logger.error("[命令发送失败] 国标级联 注销: {}", e.getMessage());
                    }
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                        logger.error("[线程休眠失败] : {}", e.getMessage());
                    }
                    //  只要保存就发送注册
                    commanderForPlatform.register(parentPlatform, null, null);
                    try {
                        commanderForPlatform.register(parentPlatform, null, null);
                    } catch (InvalidArgumentException | ParseException | SipException e) {
                        logger.error("[命令发送失败] 国标级联 注册: {}", e.getMessage());
                    }
                } else {
                    //  只要保存就发送注册
                    commanderForPlatform.register(parentPlatform, null, null);
                    try {
                        commanderForPlatform.register(parentPlatform, null, null);
                    } catch (InvalidArgumentException | ParseException | SipException e) {
                        logger.error("[命令发送失败] 国标级联 注册: {}", e.getMessage());
                    }
                }
            } else if (parentPlatformOld != null && parentPlatformOld.isEnable() && !parentPlatform.isEnable()) { // 关闭启用时注销
                commanderForPlatform.unregister(parentPlatformOld, null, null);
                try {
                    commanderForPlatform.unregister(parentPlatformOld, null, null);
                } catch (InvalidArgumentException | ParseException | SipException e) {
                    logger.error("[命令发送失败] 国标级联 注销: {}", e.getMessage());
                }
                // 停止订阅相关的定时任务
                subscribeHolder.removeAllSubscribe(parentPlatform.getServerGBId());
            }
@@ -258,17 +278,21 @@
            throw new ControllerException(ErrorCode.ERROR100.getCode(), "平台不存在");
        }
        // 发送离线消息,无论是否成功都删除缓存
        commanderForPlatform.unregister(parentPlatform, (event -> {
            // 清空redis缓存
            redisCatchStorage.delPlatformCatchInfo(parentPlatform.getServerGBId());
            redisCatchStorage.delPlatformKeepalive(parentPlatform.getServerGBId());
            redisCatchStorage.delPlatformRegister(parentPlatform.getServerGBId());
        }), (event -> {
            // 清空redis缓存
            redisCatchStorage.delPlatformCatchInfo(parentPlatform.getServerGBId());
            redisCatchStorage.delPlatformKeepalive(parentPlatform.getServerGBId());
            redisCatchStorage.delPlatformRegister(parentPlatform.getServerGBId());
        }));
        try {
            commanderForPlatform.unregister(parentPlatform, (event -> {
                // 清空redis缓存
                redisCatchStorage.delPlatformCatchInfo(parentPlatform.getServerGBId());
                redisCatchStorage.delPlatformKeepalive(parentPlatform.getServerGBId());
                redisCatchStorage.delPlatformRegister(parentPlatform.getServerGBId());
            }), (event -> {
                // 清空redis缓存
                redisCatchStorage.delPlatformCatchInfo(parentPlatform.getServerGBId());
                redisCatchStorage.delPlatformKeepalive(parentPlatform.getServerGBId());
                redisCatchStorage.delPlatformRegister(parentPlatform.getServerGBId());
            }));
        } catch (InvalidArgumentException | ParseException | SipException e) {
            logger.error("[命令发送失败] 国标级联 注销: {}", e.getMessage());
        }
        boolean deleteResult = storager.deleteParentPlatform(parentPlatform);
        storager.delCatalogByPlatformId(parentPlatform.getServerGBId());