ios设备的NkAgent断线重连优化

master
yineng.huang 2024-07-04 16:31:47 +08:00
parent 8734b94843
commit b39d6c4b64
3 changed files with 34 additions and 18 deletions

View File

@ -1,5 +1,6 @@
package net.northking.cctp.upperComputer.deviceManager.thread; package net.northking.cctp.upperComputer.deviceManager.thread;
import net.northking.cctp.upperComputer.deviceManager.IOSDeviceManager;
import net.northking.cctp.upperComputer.driver.ios.NKAgent; import net.northking.cctp.upperComputer.driver.ios.NKAgent;
import net.northking.cctp.upperComputer.driver.usbmuxd.AppleDevice; import net.northking.cctp.upperComputer.driver.usbmuxd.AppleDevice;
import net.northking.cctp.upperComputer.entity.PhoneEntity; import net.northking.cctp.upperComputer.entity.PhoneEntity;
@ -35,33 +36,39 @@ public abstract class IosDeviceInitThread extends Thread {
protected void createNKAgent() { protected void createNKAgent() {
nkAgent = new NKAgent(this.appleDevice); nkAgent = new NKAgent(this.appleDevice);
boolean nkAgentReady = false; boolean nkAgentReady = false;
int retryTime = 1; int reTryTime = 1;
while (!nkAgentReady && retryTime <= 5) { do {
logger.debug("尝试第{}次连接设备【{}】的nkAgent",retryTime,phone.getUdid()); logger.debug("尝试第{}次连接设备【{}】的nkAgent", reTryTime, phone.getUdid());
try { try {
nkAgent.connect(); nkAgent.connect();
nkAgentReady = true; nkAgentReady = nkAgent.getStatus();
nkAgent.setOnDisconnectListener(()->{ logger.debug("设备【{}】的nkAgent连接完成结果{}", phone.getUdid(),nkAgentReady);
logger.warn("设备【{}】的nkAgent失效了需要重新创建...........",phone.getUdid()); if (nkAgentReady) {
createNKAgent(); logger.debug("设置设备【{}】的帧数为:{}", phone.getUdid(), 25);
}); nkAgent.setMJPEGServerRate(25);
logger.debug("设备【{}】的nkAgent连接成功",phone.getUdid()); } else {
logger.debug("设备【{}】的帧数",phone.getUdid()); logger.error("第{}次连接设备【{}】的agent不成功等待下一次......",reTryTime, phone.getUdid());
nkAgent.setMJPEGServerRate(60); }
} catch (IOException e) { } catch (IOException e) {
logger.error("无法连接设备【{}】的agent",phone.getUdid(),e); logger.error("第{}次连接设备【{}】的agent出错",reTryTime, phone.getUdid(), e);
try { try {
Thread.sleep(3000); Thread.sleep(3000);
} catch (InterruptedException ex) { } catch (InterruptedException ex) {
ex.printStackTrace(); break;
} }
} }
retryTime++; reTryTime++;
} } while (!nkAgentReady && reTryTime <= 5);
if (!nkAgentReady) { if (!nkAgentReady) {
throw new ExecuteException(String.format("无法创建设备【%s】nkAgent", phone.getUdid())); throw new ExecuteException(String.format("无法创建设备【%s】nkAgent", phone.getUdid()));
} }
logger.debug("设置设备【{}】的nkAgent掉线之后的监听器................", phone.getUdid());
nkAgent.setOnDisconnectListener(() -> {
logger.warn("设备【{}】的nkAgent失效了需要重新创建...........", phone.getUdid());
IOSDeviceManager.getInstance().getIosInitThread(phone.getUdid()).createNKAgent();
logger.warn("设备【{}】的nkAgent重新创建完成...........", phone.getUdid());
});
logger.debug("设备【{}】的nkAgent连接完毕................", phone.getUdid());
} }
public NKAgent getNkAgent() { public NKAgent getNkAgent() {

View File

@ -10,12 +10,16 @@ import net.northking.cctp.upperComputer.driver.ios.command.listener.ScreenInfoDa
import net.northking.cctp.upperComputer.driver.ios.packet.*; import net.northking.cctp.upperComputer.driver.ios.packet.*;
import net.northking.cctp.upperComputer.driver.usbmuxd.AppleDevice; import net.northking.cctp.upperComputer.driver.usbmuxd.AppleDevice;
import net.northking.cctp.upperComputer.driver.usbmuxd.UsbMuxd; import net.northking.cctp.upperComputer.driver.usbmuxd.UsbMuxd;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
public final class NKAgent { public final class NKAgent {
private final static Logger logger = LoggerFactory.getLogger(NKAgent.class);
public static final int PORT = 50001; public static final int PORT = 50001;
private final DeviceSocketProvider deviceSocketProvider; private final DeviceSocketProvider deviceSocketProvider;
@ -44,9 +48,10 @@ public final class NKAgent {
} }
public void connect() throws IOException { public void connect() throws IOException {
System.out.println("NKAgent connect"); logger.debug("开始连接设备【{}】的nkAgent........",getUUID());
initTransfer(); initTransfer();
initAsyncListener(); initAsyncListener();
logger.debug("设备【{}】连接结果:{}........",getUUID(),packetTransfer.isConnected());
} }
@ -208,6 +213,10 @@ public final class NKAgent {
packet.fillICommandData(bool); packet.fillICommandData(bool);
return bool.isSuccess(); return bool.isSuccess();
} }
public boolean getStatus() {
return this.packetTransfer.isConnected();
}
// //
// public boolean clickUiNode(SearchUiNodeData.SearchChain chain) { // public boolean clickUiNode(SearchUiNodeData.SearchChain chain) {
// return clickUiNode(chain.toSearchString(null)); // return clickUiNode(chain.toSearchString(null));

View File

@ -138,7 +138,7 @@ public class PacketTransfer {
} }
public ICommandPacket syncSend(ICommandPacket sendPacket) { public ICommandPacket syncSend(ICommandPacket sendPacket) {
logger.debug("connected = " + connected); logger.debug("设备的nkAgent连接状态connected = " + connected);
if (!connected) return null; if (!connected) return null;
SendTarget sendTarget = new SendTarget(sendPacket, false); SendTarget sendTarget = new SendTarget(sendPacket, false);
sendQueue.offer(sendTarget); sendQueue.offer(sendTarget);