From ce511a3d55e5f349b1647172e562c1659bbc8172 Mon Sep 17 00:00:00 2001
From: Junjie <DELL@qq.com>
Date: 星期五, 09 一月 2026 15:27:27 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/thread/impl/NyShuttleThread.java |   47 +++++++++++++++++++++++++++++++++++------------
 1 files changed, 35 insertions(+), 12 deletions(-)

diff --git a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
index ccaffca..b04f6d2 100644
--- a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
@@ -15,6 +15,7 @@
 import com.zy.core.enums.SlaveType;
 import com.zy.core.thread.ShuttleThread;
 import com.zy.core.utils.FakeDeviceUtils;
+import com.zy.core.utils.TimeoutExecutor;
 import lombok.extern.slf4j.Slf4j;
 
 import java.io.*;
@@ -24,6 +25,7 @@
 import java.net.SocketTimeoutException;
 import java.text.MessageFormat;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 
 @Slf4j
 @SuppressWarnings("all")
@@ -54,9 +56,15 @@
 
                 try {
                     this.connect();
+                    // 鍦ㄥ惊鐜腑浣跨敤
+                    boolean result = TimeoutExecutor.executeWithTimeout(
+                            () -> this.listenSocketMessage(),
+                            30,  // 30绉掕秴鏃�
+                            TimeUnit.SECONDS
+                    );
                     Thread.sleep(200);
-                    listenSocketMessage();
                 } catch (Exception e) {
+                    closeSocket();
                     e.printStackTrace();
                 }
             }
@@ -82,6 +90,8 @@
                     if (deviceCommandMsg == null) {
                         continue;
                     }
+
+                    this.connect();
                     executeCommand(deviceCommandMsg);
 
                     Thread.sleep(200);
@@ -129,10 +139,11 @@
         }
     }
 
-    private void listenSocketMessage() {
+    private boolean listenSocketMessage() {
+        StringBuffer sb = new StringBuffer();
         try {
             if (this.socket == null) {
-                return;
+                return false;
             }
 
             DeviceMsgUtils deviceMsgUtils = null;
@@ -141,19 +152,20 @@
             } catch (Exception e) {
             }
             if (deviceMsgUtils == null) {
-                return;
+                return false;
             }
 
             // 鑾峰彇杈撳叆娴�
             BufferedReader reader = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
             // 璇诲彇鏈嶅姟鍣ㄧ殑鍝嶅簲
-            StringBuffer sb = new StringBuffer();
             char[] chars = new char[2048];//缂撳啿鍖�
             while (true) {
                 reader.read(chars);
                 String trim = new String(chars);
-                sb.append(trim);
-                if (trim.lastIndexOf("\r\n") != -1) {
+                int lastIndexOf = trim.lastIndexOf("\r\n");
+                if (lastIndexOf != -1) {
+                    trim = trim.substring(0, lastIndexOf);
+                    sb.append(trim);
                     break;
                 }
             }
@@ -164,12 +176,20 @@
             }catch (Exception e){}
 
             if(result == null) {
-                return;
+                return false;
             }
 
+            JSONObject header = null;
+            JSONObject body = null;
             JSONObject response = result.getJSONObject("response");
-            JSONObject header = response.getJSONObject("header");
-            JSONObject body = response.getJSONObject("body");
+            if (response == null) {
+                JSONObject request = result.getJSONObject("request");
+                header = request.getJSONObject("header");
+                body = request.getJSONObject("body");
+            }else {
+                header = response.getJSONObject("header");
+                body = response.getJSONObject("body");
+            }
 
             String msgType = result.getString("msgType");
 
@@ -213,11 +233,13 @@
                 }
             }
         } catch (SocketTimeoutException e) {
-
+            return false;
         } catch (IOException e) {
             e.printStackTrace();
             closeSocket();
+            return false;
         }
+        return true;
     }
 
     public JSONObject parseSocketResult(JSONObject data) {
@@ -280,6 +302,8 @@
                 return false;
             }
 
+            this.lastConnectTime = System.currentTimeMillis();
+
             if(this.deviceConfig.getFake()) {
                 return fakeConnect();
             }else {
@@ -289,7 +313,6 @@
                     deviceSocket.setSoTimeout(10000);
                     deviceSocket.setKeepAlive(true);
                     this.socket = deviceSocket;
-                    this.lastConnectTime = System.currentTimeMillis();
                     log.info(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅Socket閾炬帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), deviceConfig.getDeviceNo(), deviceConfig.getIp(), deviceConfig.getPort()));
                 }
             }

--
Gitblit v1.9.1