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, "抬起成功"); }