From 37be8c68eae437e9dc9b702eefb08a9368c55835 Mon Sep 17 00:00:00 2001 From: "jieying.li" Date: Wed, 24 Jul 2024 18:50:41 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E4=B8=8A=E4=BD=8D=E6=9C=BA=201.?= =?UTF-8?q?=E4=BF=AE=E6=94=B9AgentSession=E7=9A=84=E6=8C=87=E4=BB=A4?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E7=BA=BF=E7=A8=8B=E7=9A=84=E9=80=80=E5=87=BA?= =?UTF-8?q?=E5=BE=AA=E7=8E=AF=E9=80=BB=E8=BE=91=202.=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=81=9C=E6=AD=A2=E6=8C=87=E4=BB=A4=EF=BC=8C=E7=94=A8=E4=BA=8E?= =?UTF-8?q?=E9=83=A8=E5=88=86=E7=BA=BF=E7=A8=8B=E5=81=9C=E6=AD=A2=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../driver/agent/AndroidAgentSession.java | 27 ++++++++++++--- .../driver/agent/command/StopCommand.java | 34 +++++++++++++++++++ 2 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/driver/agent/command/StopCommand.java diff --git a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/driver/agent/AndroidAgentSession.java b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/driver/agent/AndroidAgentSession.java index 089af45..63e5e77 100644 --- a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/driver/agent/AndroidAgentSession.java +++ b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/driver/agent/AndroidAgentSession.java @@ -1,10 +1,12 @@ package net.northking.cctp.upperComputer.driver.agent; +import cn.hutool.core.util.StrUtil; import net.northking.cctp.upperComputer.driver.adb.Adb; import net.northking.cctp.upperComputer.driver.adb.AdbDevice; import net.northking.cctp.upperComputer.driver.adb.AdbTransport; import net.northking.cctp.upperComputer.driver.agent.command.CloseSessionCommand; +import net.northking.cctp.upperComputer.driver.agent.command.StopCommand; import net.northking.cctp.upperComputer.driver.agent.command.protocol.ProtocolCommand; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -139,26 +141,43 @@ public class AndroidAgentSession { */ public void closeSilence() { if (null != this.sendThread) { - this.sendThread.interrupt(); + this.sendThread.setRunning(false); + this.sendQueue.clear(); + StopCommand sc = new StopCommand(); + this.sendQueue.add(sc); // 添加结束命令command + try { + this.sendThread.join(); + } catch (InterruptedException e) { + logger.error("线程join失败", e); + } } state = false; } private class CommandSendThread extends Thread { + private volatile boolean running = true; + public void setRunning(boolean running) { + this.running = running; + } @Override public void run() { - while (!isInterrupted()) { + while (running) { ProtocolCommand command; try { command = sendQueue.take(); + logger.debug("获取到指令信息:{}", StrUtil.toString(command)); } catch (InterruptedException e) { break; } try { - dataOutputStream.writeInt(command.getCommandId()); - command.doSend(dataOutputStream); + if (command.getCommandId() != -999) { + dataOutputStream.writeInt(command.getCommandId()); + command.doSend(dataOutputStream); + } else { + logger.debug("线程准备停止...."); + } } catch (IOException ignore) { break; } diff --git a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/driver/agent/command/StopCommand.java b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/driver/agent/command/StopCommand.java new file mode 100644 index 0000000..e0256d6 --- /dev/null +++ b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/driver/agent/command/StopCommand.java @@ -0,0 +1,34 @@ +package net.northking.cctp.upperComputer.driver.agent.command; + +import net.northking.cctp.upperComputer.driver.agent.command.protocol.AbstractProtocolCommand; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class StopCommand extends AbstractProtocolCommand { + /** + * 每个指令具备的唯一id + * + * @return 指令id + */ + @Override + public int getCommandId() { + return -999; + } + + /** + * Session将调用此方法进行数据发送 + * + * @param output 输出对象 + */ + @Override + public void doSend(DataOutput output) throws IOException { + + } + + @Override + public String buildReceive(DataInput input) throws IOException { + return null; + } +}