From e38f18a0504f6f84114596133e74fb48fa5b46f2 Mon Sep 17 00:00:00 2001
From: "yineng.huang" <huangyineng_zxl@163.com>
Date: Thu, 11 Jul 2024 18:48:23 +0800
Subject: [PATCH] =?UTF-8?q?=E7=82=B9=E5=87=BB=E3=80=81=E6=BB=91=E5=8A=A8?=
 =?UTF-8?q?=E3=80=81=E7=82=B9=E5=87=BBhome=E9=94=AE=E4=B9=8B=E5=90=8E?=
 =?UTF-8?q?=E8=8E=B7=E5=8F=96=E4=B8=80=E6=AC=A1ui=E8=8A=82=E7=82=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../webSocket/thread/GetNodeTreeThread.java   | 78 +++++++++++++------
 ...osWindowsAndLinuxMessageHandlerThread.java |  8 ++
 2 files changed, 63 insertions(+), 23 deletions(-)

diff --git a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/webSocket/thread/GetNodeTreeThread.java b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/webSocket/thread/GetNodeTreeThread.java
index f5a3bdc..987ab01 100644
--- a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/webSocket/thread/GetNodeTreeThread.java
+++ b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/webSocket/thread/GetNodeTreeThread.java
@@ -24,7 +24,11 @@ public class GetNodeTreeThread extends Thread {
 
     private CmdRequest request;
 
-    private boolean keepPushNode = false;
+    private boolean keepPushNode = true;  //前端是否打开了获取ui节点
+
+    private boolean gettingNode = false;  //正在获取ui树
+
+    private boolean longTimeGetNode = false;   //是否长时间没有点击等操作,一直获取
 
     private final Object lock = new Object();
 
@@ -41,29 +45,39 @@ public class GetNodeTreeThread extends Thread {
     public void run() {
         logger.info("开始获取设备【{}】的节点............................", deviceId);
         while (!isInterrupted()) {
-            try {
-                Thread.sleep(1000);
-            } catch (InterruptedException e) {
-                interrupt();
-                break;
-            }
-            try {
-                IosDeviceInitThread iosInitThread = IOSDeviceManager.getInstance().getIosInitThread(deviceId);
-                if (null == iosInitThread || iosInitThread.isInterrupted() || !iosInitThread.isAlive()) {
-                    logger.debug("设备【{}】掉线了,等一下,不要急........................", deviceId);
-                    continue;
+            if (keepPushNode) {
+                try {
+                    gettingNode = true;   //正在获取uiNode
+                    IosDeviceInitThread iosInitThread = IOSDeviceManager.getInstance().getIosInitThread(deviceId);
+                    if (null == iosInitThread || iosInitThread.isInterrupted() || !iosInitThread.isAlive()) {
+                        logger.debug("设备【{}】掉线了,等一下,不要急........................", deviceId);
+                        break;
+                    }
+                    UiNodeData uiNodeData = iosInitThread.getNkAgent().uiTreeNode();
+                    logger.debug("获取结束,nodeData空:{}", uiNodeData == null);
+                    gettingNode = false;  //uiNode获取完毕
+                    SessionUtils.sendContinuousData(session, request, uiNodeData, "获取节点树成功");
+                } catch (IllegalStateException e) {
+                    logger.warn("webSession已经关闭",e);
+                    break;
+                } catch (Exception e) {
+                    logger.warn("设备【{}】获取节点出了点问题,但是不影响,继续", deviceId, e);
                 }
-                logger.debug("开始获取......");
-                UiNodeData uiNodeData = iosInitThread.getNkAgent().uiTreeNode();
-                logger.debug("获取结束,nodeData空:{}", uiNodeData == null);
-                SessionUtils.sendContinuousData(session, request, uiNodeData, "获取节点树成功");
-            } catch (IllegalStateException e) {
-                logger.warn("webSession已经关闭",e);
-                break;
-            } catch (Exception e) {
-                logger.warn("设备【{}】获取节点出了点问题,但是不影响,继续", deviceId, e);
-            }
-            if (!keepPushNode) {
+                synchronized (lock) {
+                    logger.warn("设备【{}】等待下一次获取node节点.....................", deviceId);
+                    try {
+                        if (longTimeGetNode) {
+                            lock.wait(5*1000);
+                        } else {
+                            lock.wait(2*1000);
+                            longTimeGetNode = true;
+                        }
+                    } catch (InterruptedException e) {
+                        interrupt();
+                        break;
+                    }
+                }
+            } else {
                 synchronized (lock) {
                     logger.warn("设备【{}】等待获取node节点.....................", deviceId);
                     try {
@@ -96,6 +110,8 @@ public class GetNodeTreeThread extends Thread {
     public void startGetNodeTree(CmdRequest request) {
         this.request = request;
         this.keepPushNode = true;
+        this.gettingNode = false;
+        this.longTimeGetNode = false;
         synchronized (lock) {
             logger.debug("设备【{}】开始获取节点树...................", deviceId);
             lock.notify();
@@ -106,4 +122,20 @@ public class GetNodeTreeThread extends Thread {
     public void exitGetNodeTree() {
         interrupt();
     }
+
+    public void getOnceNodeTree() {
+        longTimeGetNode = false;
+        if (keepPushNode) {
+            if (gettingNode) {
+                logger.warn("设备【{}】正在获取uiNode.............", deviceId);
+            } else {
+                synchronized (lock) {
+                    logger.debug("设备【{}】操作了,获取一次节点树...................", deviceId);
+                    lock.notify();
+                }
+            }
+        } else {
+            logger.warn("设备【{}】前端已经关闭了uiNode,无需获取.............", deviceId);
+        }
+    }
 }
diff --git a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/webSocket/thread/IosWindowsAndLinuxMessageHandlerThread.java b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/webSocket/thread/IosWindowsAndLinuxMessageHandlerThread.java
index 6e9461d..e20cb42 100644
--- a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/webSocket/thread/IosWindowsAndLinuxMessageHandlerThread.java
+++ b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/webSocket/thread/IosWindowsAndLinuxMessageHandlerThread.java
@@ -615,6 +615,10 @@ public class IosWindowsAndLinuxMessageHandlerThread extends AbstractIosMessageHa
                 SessionUtils.sendFailureMessage(session, request, "热键[" + key + "]不存在");
                 return;
         }
+        if (null != nodeTreeThread && nodeTreeThread.isAlive()) {
+            logger.debug("手机【{}】操作了一次,准备获取node节点.................", phoneEntity.getUdid());
+            nodeTreeThread.getOnceNodeTree();
+        }
         SessionUtils.sendSuccessData(session, request, null, "热键处理成功");
     }
 
@@ -654,6 +658,10 @@ public class IosWindowsAndLinuxMessageHandlerThread extends AbstractIosMessageHa
             handleWatch.reset();
         }
         logger.debug("抬起实际位置x:{},y:{}", point.getX(), point.getY());
+        if (null != nodeTreeThread && nodeTreeThread.isAlive()) {
+            logger.debug("手机【{}】操作了一次,准备获取node节点.................", phoneEntity.getUdid());
+            nodeTreeThread.getOnceNodeTree();
+        }
         SessionUtils.sendSuccessData(session, request, null, "抬起成功");
     }