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

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

View File

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