From 0ff4ed217de599e6c6336f0330787b7593641dc4 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期一, 17 十月 2022 12:39:58 +0800
Subject: [PATCH] 优化消息处理中存在可能异常的处理流程

---
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/control/cmd/DeviceControlQueryMessageHandler.java |  104 ++++++++++++++++++++++++---------------------------
 1 files changed, 49 insertions(+), 55 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/control/cmd/DeviceControlQueryMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/control/cmd/DeviceControlQueryMessageHandler.java
index 094e656..cd70dd0 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/control/cmd/DeviceControlQueryMessageHandler.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/control/cmd/DeviceControlQueryMessageHandler.java
@@ -16,6 +16,8 @@
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Component;
 import org.springframework.util.ObjectUtils;
 import org.springframework.util.StringUtils;
@@ -48,6 +50,10 @@
     @Autowired
     private SIPCommanderFroPlatform cmderFroPlatform;
 
+    @Qualifier("taskExecutor")
+    @Autowired
+    private ThreadPoolTaskExecutor taskExecutor;
+
     @Override
     public void afterPropertiesSet() throws Exception {
         controlMessageHandler.addHandler(cmdType, this);
@@ -71,34 +77,30 @@
             if (parentPlatform.getServerGBId().equals(targetGBId)) {
                 // 杩滅▼鍚姩鏈钩鍙帮細闇�瑕佸湪閲嶆柊鍚姩绋嬪簭鍚庡厛瀵筍ipStack瑙g粦
                 logger.info("鎵ц杩滅▼鍚姩鏈钩鍙板懡浠�");
-                cmderFroPlatform.unregister(parentPlatform, null, null);
-
-                Thread restartThread = new Thread(new Runnable() {
-                    @Override
-                    public void run() {
-                        try {
-                            Thread.sleep(3000);
-                            SipProvider up = (SipProvider) SpringBeanFactory.getBean("udpSipProvider");
-                            SipStackImpl stack = (SipStackImpl)up.getSipStack();
-                            stack.stop();
-                            Iterator listener = stack.getListeningPoints();
-                            while (listener.hasNext()) {
-                                stack.deleteListeningPoint((ListeningPoint) listener.next());
-                            }
-                            Iterator providers = stack.getSipProviders();
-                            while (providers.hasNext()) {
-                                stack.deleteSipProvider((SipProvider) providers.next());
-                            }
-                            VManageBootstrap.restart();
-                        } catch (InterruptedException ignored) {
-                        } catch (ObjectInUseException e) {
-                            e.printStackTrace();
+                try {
+                    cmderFroPlatform.unregister(parentPlatform, null, null);
+                } catch (InvalidArgumentException | ParseException | SipException e) {
+                    logger.error("[鍛戒护鍙戦�佸け璐 鍥芥爣绾ц仈 娉ㄩ攢: {}", e.getMessage());
+                }
+                taskExecutor.execute(()->{
+                    try {
+                        Thread.sleep(3000);
+                        SipProvider up = (SipProvider) SpringBeanFactory.getBean("udpSipProvider");
+                        SipStackImpl stack = (SipStackImpl)up.getSipStack();
+                        stack.stop();
+                        Iterator listener = stack.getListeningPoints();
+                        while (listener.hasNext()) {
+                            stack.deleteListeningPoint((ListeningPoint) listener.next());
                         }
+                        Iterator providers = stack.getSipProviders();
+                        while (providers.hasNext()) {
+                            stack.deleteSipProvider((SipProvider) providers.next());
+                        }
+                        VManageBootstrap.restart();
+                    } catch (InterruptedException | ObjectInUseException e) {
+                        logger.error("[浠诲姟鎵ц澶辫触] 鏈嶅姟閲嶅惎: {}", e.getMessage());
                     }
                 });
-
-                restartThread.setDaemon(false);
-                restartThread.start();
             } else {
                 // 杩滅▼鍚姩鎸囧畾璁惧
             }
@@ -110,38 +112,30 @@
             if (deviceForPlatform == null) {
                 try {
                     responseAck(serverTransaction, Response.NOT_FOUND);
-                    return;
-                } catch (SipException e) {
-                    e.printStackTrace();
-                } catch (InvalidArgumentException e) {
-                    e.printStackTrace();
-                } catch (ParseException e) {
-                    e.printStackTrace();
+                } catch (SipException | InvalidArgumentException | ParseException e) {
+                    logger.error("[鍛戒护鍙戦�佸け璐 閿欒淇℃伅: {}", e.getMessage());
                 }
+                return;
             }
-            cmder.fronEndCmd(deviceForPlatform, channelId, cmdString, eventResult -> {
-                // 澶辫触鐨勫洖澶�
-                try {
-                    responseAck(serverTransaction, eventResult.statusCode, eventResult.msg);
-                } catch (SipException e) {
-                    e.printStackTrace();
-                } catch (InvalidArgumentException e) {
-                    e.printStackTrace();
-                } catch (ParseException e) {
-                    e.printStackTrace();
-                }
-            }, eventResult -> {
-                // 鎴愬姛鐨勫洖澶�
-                try {
-                    responseAck(serverTransaction, eventResult.statusCode);
-                } catch (SipException e) {
-                    e.printStackTrace();
-                } catch (InvalidArgumentException e) {
-                    e.printStackTrace();
-                } catch (ParseException e) {
-                    e.printStackTrace();
-                }
-            });
+            try {
+                cmder.fronEndCmd(deviceForPlatform, channelId, cmdString, eventResult -> {
+                    // 澶辫触鐨勫洖澶�
+                    try {
+                        responseAck(serverTransaction, eventResult.statusCode, eventResult.msg);
+                    } catch (SipException | InvalidArgumentException | ParseException e) {
+                        logger.error("[鍛戒护鍙戦�佸け璐 浜戝彴/鍓嶇鍥炲: {}", e.getMessage());
+                    }
+                }, eventResult -> {
+                    // 鎴愬姛鐨勫洖澶�
+                    try {
+                        responseAck(serverTransaction, eventResult.statusCode);
+                    } catch (SipException | InvalidArgumentException | ParseException e) {
+                        logger.error("[鍛戒护鍙戦�佸け璐 浜戝彴/鍓嶇鍥炲: {}", e.getMessage());
+                    }
+                });
+            } catch (InvalidArgumentException | SipException | ParseException e) {
+                logger.error("[鍛戒护鍙戦�佸け璐 浜戝彴/鍓嶇: {}", e.getMessage());
+            }
         }
     }
 }

--
Gitblit v1.8.0