update:重构脚本执行方式
This commit is contained in:
@@ -1,15 +1,26 @@
|
||||
package com.yutou.qqbot.utlis;
|
||||
|
||||
import com.yutou.qqbot.data.JianRScriptData;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.yutou.qqbot.data.jianr.AndroidDevice;
|
||||
import com.yutou.qqbot.data.jianr.JianRScriptData;
|
||||
import com.yutou.qqbot.data.jianr.JianRScriptV2Data;
|
||||
import com.yutou.qqbot.data.jianr.Vector2D;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
public class JianRTaskManager {
|
||||
public static final String Redis_Script ="jianrScript_Script";
|
||||
public static final String Redis_Device="jianrScript_Devices";
|
||||
public static final String Redis_RunIndex="jianrScript_RunIndex";
|
||||
private static JianRTaskManager instance;
|
||||
private JianRScriptData task;
|
||||
private JianRScriptV2Data task;
|
||||
private AndroidDevice device;
|
||||
private boolean running = false;
|
||||
private int runIndex = 0;
|
||||
private String log;
|
||||
private int modelId;
|
||||
|
||||
public static JianRTaskManager getInstance() {
|
||||
if (instance == null) {
|
||||
@@ -22,17 +33,22 @@ public class JianRTaskManager {
|
||||
|
||||
}
|
||||
|
||||
public void setTask(JianRScriptData data) {
|
||||
public void setModelId(int modelId) {
|
||||
this.modelId = modelId;
|
||||
}
|
||||
|
||||
public void setTask(JianRScriptV2Data data, AndroidDevice device) {
|
||||
task = data;
|
||||
runIndex=0;
|
||||
String s = RedisTools.get("jianrScript_RunIndex_" + data.getName());
|
||||
this.device = device;
|
||||
runIndex = 0;
|
||||
String s = RedisTools.getHashMap(Redis_RunIndex,data.getTitle());
|
||||
if (s != null) {
|
||||
runIndex = Integer.parseInt(s);
|
||||
}
|
||||
}
|
||||
|
||||
public void start() {
|
||||
if(running){
|
||||
if (running) {
|
||||
return;
|
||||
}
|
||||
running = true;
|
||||
@@ -43,19 +59,21 @@ public class JianRTaskManager {
|
||||
while (running) {
|
||||
try {
|
||||
log("已运行: " + runIndex + " 次");
|
||||
for (JianRScriptData.Script script : task.getRun()) {
|
||||
log(script.getName());
|
||||
if (script.getModel().equals(JianRScriptData.Script.ScriptModel.CLICK)) {
|
||||
adbTap(task.getDevice(), script);
|
||||
for (JianRScriptV2Data.Script script : task.getScript()) {
|
||||
if(!isRunning()){
|
||||
log("任务已停止");
|
||||
break;
|
||||
}
|
||||
log(script.getTitle());
|
||||
JianRTaskManager.this.run(device, modelId, script);
|
||||
try {
|
||||
Thread.sleep((long) getRandom(0, script.getRandomNextWaitTime(), script.getNextWaitTime()));
|
||||
Thread.sleep((long) getRandom(0, script.getRandomNextWaitTime()*1000, script.getNextWaitTime()*1000));
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
runIndex++;
|
||||
RedisTools.set("jianrScript_RunIndex_" + task.getName(), runIndex + "");
|
||||
RedisTools.setHashMap(Redis_RunIndex,task.getTitle(),runIndex+"");
|
||||
log("循环一次任务");
|
||||
} catch (Exception e) {
|
||||
running = false;
|
||||
@@ -67,6 +85,32 @@ public class JianRTaskManager {
|
||||
}).start();
|
||||
}
|
||||
|
||||
private void run(AndroidDevice device, int modelId, JianRScriptV2Data.Script script) {
|
||||
AndroidDevice.GameDisplay gameDisplay = device.getDeviceDisplay().get(modelId);
|
||||
Vector2D vector2D = null;
|
||||
switch (script.getActivity()) {
|
||||
case JianRScriptV2Data.ScriptModel.MAP:
|
||||
vector2D = getMapCoords(device, gameDisplay);
|
||||
break;
|
||||
case JianRScriptV2Data.ScriptModel.attack:
|
||||
vector2D = getAttackCoords(device, gameDisplay);
|
||||
break;
|
||||
case JianRScriptV2Data.ScriptModel.dialog_go:
|
||||
vector2D = getDialogCoords(device, gameDisplay, false);
|
||||
break;
|
||||
case JianRScriptV2Data.ScriptModel.dialog_back:
|
||||
vector2D = getDialogCoords(device, gameDisplay, true);
|
||||
break;
|
||||
default:
|
||||
if (script.getActivity().startsWith(JianRScriptV2Data.ScriptModel.formationType)) {
|
||||
vector2D = getNextFormationCoords(device, gameDisplay, Integer.parseInt(script.getActivity().split("#")[1]));
|
||||
}
|
||||
}
|
||||
if (vector2D != null) {
|
||||
adb(device, vector2D);
|
||||
}
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
task = null;
|
||||
running = false;
|
||||
@@ -80,6 +124,10 @@ public class JianRTaskManager {
|
||||
return running;
|
||||
}
|
||||
|
||||
/**
|
||||
* 老版本脚本执行命令
|
||||
*/
|
||||
@Deprecated
|
||||
private void adbTap(String deviceId, JianRScriptData.Script script) {
|
||||
String exec = String.format("adb -s %s shell input tap %f %f",
|
||||
deviceId,
|
||||
@@ -93,6 +141,7 @@ public class JianRTaskManager {
|
||||
this.log = String.format("[%s]%s",
|
||||
AppTools.getToDayNowTimeToString(),
|
||||
log);
|
||||
System.out.println(this.log);
|
||||
}
|
||||
|
||||
private float getRandom(int origin, int randomNum, int x) {
|
||||
@@ -106,7 +155,7 @@ public class JianRTaskManager {
|
||||
|
||||
public String getTaskName() {
|
||||
if (task != null) {
|
||||
return task.getName();
|
||||
return task.getTitle();
|
||||
}
|
||||
return "没有任务在运行";
|
||||
}
|
||||
@@ -114,4 +163,121 @@ public class JianRTaskManager {
|
||||
public String getLog() {
|
||||
return log;
|
||||
}
|
||||
|
||||
public void connect(String deviceId) {
|
||||
String exec = String.format("adb connect %s",
|
||||
deviceId);
|
||||
System.out.println(exec);
|
||||
AppTools.exec(exec
|
||||
, null, false, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取出击坐标
|
||||
*
|
||||
* @param device 设备信息
|
||||
* @return 坐标
|
||||
*/
|
||||
private Vector2D getAttackCoords(AndroidDevice device, AndroidDevice.GameDisplay gameDisplay) {
|
||||
Vector2D v2d = new Vector2D();
|
||||
v2d.setX(gameDisplay.getWidth() * 0.8725 + gameDisplay.getStart().getX());
|
||||
v2d.setY(gameDisplay.getHeight() * 0.9161 + gameDisplay.getStart().getY());
|
||||
return v2d;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取地图点击坐标
|
||||
*
|
||||
* @param device 设备信息
|
||||
* @return 坐标
|
||||
*/
|
||||
private Vector2D getMapCoords(AndroidDevice device, AndroidDevice.GameDisplay gameDisplay) {
|
||||
Vector2D v2d = new Vector2D();
|
||||
v2d.setX(gameDisplay.getWidth() * 0.5 + gameDisplay.getStart().getX());
|
||||
v2d.setY(gameDisplay.getHeight() * 0.5 + gameDisplay.getStart().getY());
|
||||
return v2d;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取阵型点击坐标
|
||||
*
|
||||
* @param device 设备信息
|
||||
* @param type 阵型。0~4
|
||||
* @return 坐标
|
||||
*/
|
||||
private Vector2D getNextFormationCoords(AndroidDevice device, AndroidDevice.GameDisplay gameDisplay, int type) {
|
||||
Vector2D v2d = new Vector2D();
|
||||
v2d.setX(gameDisplay.getWidth() * 0.75 + gameDisplay.getStart().getX());
|
||||
v2d.setY(gameDisplay.getHeight() * 0.24835 + gameDisplay.getStart().getY());
|
||||
|
||||
for (int i = 0; i < type; i++) {
|
||||
v2d.setY(v2d.getY() + (gameDisplay.getHeight() * 0.1461));
|
||||
}
|
||||
return v2d;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取出击坐标
|
||||
*
|
||||
* @param device 设备信息
|
||||
* @return 坐标
|
||||
*/
|
||||
private Vector2D getDialogCoords(AndroidDevice device, AndroidDevice.GameDisplay gameDisplay, boolean isBack) {
|
||||
Vector2D v2d = new Vector2D();
|
||||
v2d.setY(gameDisplay.getHeight() * 0.61722 + gameDisplay.getStart().getY());
|
||||
if (isBack) {
|
||||
v2d.setX(gameDisplay.getWidth() * 0.6575 + gameDisplay.getStart().getX());
|
||||
} else {
|
||||
v2d.setX(gameDisplay.getWidth() * 0.344642857143 + gameDisplay.getStart().getX());
|
||||
}
|
||||
return v2d;
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
AndroidDevice device = new AndroidDevice();
|
||||
AndroidDevice.DeviceDisplay deviceDisplay = new AndroidDevice.DeviceDisplay();
|
||||
AndroidDevice.GameDisplay gameDisplay = new AndroidDevice.GameDisplay();
|
||||
deviceDisplay.setHeight(1800);
|
||||
deviceDisplay.setWidth(2800);
|
||||
Vector2D start = new Vector2D();
|
||||
Vector2D end = new Vector2D();
|
||||
start.setX(2000);
|
||||
start.setY(57);
|
||||
end.setX(2800);
|
||||
end.setY(581);
|
||||
gameDisplay.setStart(start);
|
||||
gameDisplay.setEnd(end);
|
||||
List<AndroidDevice.GameDisplay> displays = new ArrayList<>();
|
||||
displays.add(gameDisplay);
|
||||
device.setDeviceDisplay(displays);
|
||||
device.setAndroidDevice(deviceDisplay);
|
||||
device.setDeviceId("192.168.31.142:6666");
|
||||
device.setTitle("SAMSUNG-TAB-S7+");
|
||||
|
||||
JianRTaskManager manager = new JianRTaskManager();
|
||||
Vector2D mapCoords;
|
||||
// mapCoords = manager.getMapCoords(device,device.getGameDisplay().get(0));
|
||||
// mapCoords = manager.getAttackCoords(device,device.getGameDisplay().get(0));
|
||||
// mapCoords = manager.getNextFormationCoords(device,device.getGameDisplay().get(0), 0);
|
||||
mapCoords = manager.getDialogCoords(device, device.getDeviceDisplay().get(0), true);
|
||||
// adb(device, mapCoords);
|
||||
System.out.println("device = " + device);
|
||||
String jsonString = "{\"name\":\"1-1Test\",\"script\":[{\"name\":\"点击地图\",\"activity\":\"map\",\"nextWaitTime\":2,\"randomNextWaitTime\":3},{\"name\":\"出击\",\"activity\":\"attack\",\"nextWaitTime\":12,\"randomNextWaitTime\":2},{\"name\":\"战斗\",\"activity\":\"attack\",\"nextWaitTime\":2,\"randomNextWaitTime\":3},{\"name\":\"选择单纵\",\"activity\":\"formationType#0\",\"nextWaitTime\":20,\"randomNextWaitTime\":5},{\"name\":\"结算1\",\"activity\":\"map\",\"nextWaitTime\":2,\"randomNextWaitTime\":3},{\"name\":\"结算2\",\"activity\":\"map\",\"nextWaitTime\":2,\"randomNextWaitTime\":3},{\"name\":\"获取舰娘\",\"activity\":\"map\",\"nextWaitTime\":2,\"randomNextWaitTime\":3},{\"name\":\"前进\",\"activity\":\"dialog_go\",\"nextWaitTime\":12,\"randomNextWaitTime\":3},{\"name\":\"战斗\",\"activity\":\"attack\",\"nextWaitTime\":2,\"randomNextWaitTime\":3},{\"name\":\"选择梯形\",\"activity\":\"formationType#3\",\"nextWaitTime\":20,\"randomNextWaitTime\":5},{\"name\":\"结算1\",\"activity\":\"map\",\"nextWaitTime\":2,\"randomNextWaitTime\":3},{\"name\":\"结算2\",\"activity\":\"map\",\"nextWaitTime\":2,\"randomNextWaitTime\":3},{\"name\":\"获取舰娘\",\"activity\":\"map\",\"nextWaitTime\":2,\"randomNextWaitTime\":3}]}";
|
||||
JianRScriptV2Data script = JSON.parseObject(jsonString, JianRScriptV2Data.class);
|
||||
manager.setTask(script,device);
|
||||
manager.setModelId(0);
|
||||
manager.start();
|
||||
}
|
||||
|
||||
private void adb(AndroidDevice device, Vector2D v2d) {
|
||||
String exec = String.format("adb -s %s shell input tap %f %f",
|
||||
device.getDeviceId(),
|
||||
v2d.getX(),
|
||||
v2d.getY());
|
||||
System.out.println(exec);
|
||||
AppTools.exec(exec
|
||||
, null, false, false);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user