新增舰R脚本

This commit is contained in:
2022-07-25 12:35:50 +08:00
parent c36044e6e4
commit 30fda14264
4 changed files with 389 additions and 0 deletions

View File

@@ -0,0 +1,115 @@
package com.yutou.qqbot.Controllers;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.yutou.qqbot.data.JianRScriptData;
import com.yutou.qqbot.utlis.JianRTaskManager;
import com.yutou.qqbot.utlis.RedisTools;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Set;
@Controller
public class JianRScriptController {
@RequestMapping("/jianr/run.do")
@ResponseBody
public JSONObject runScript(String task) {
JSONObject json = new JSONObject();
String data = RedisTools.get("jianrScript_Model_" + task);
if (data == null) {
json.put("code", -1);
json.put("msg", "没有找到该方案,请配置");
} else {
JianRScriptData script = JSON.parseObject(data, JianRScriptData.class);
JianRTaskManager manager = JianRTaskManager.getInstance();
if (manager.isRunning()) {
manager.stop();
}
manager.setTask(script);
manager.start();
manager.start();
json.put("code", 0);
json.put("msg", "任务创建成功");
}
return json;
}
@RequestMapping("/jianr/stop.do")
@ResponseBody
public JSONObject stop(){
JianRTaskManager.getInstance().stop();
JSONObject json = new JSONObject();
json.put("code", 0);
json.put("msg", "任务已停止");
return json;
}
@RequestMapping("/jianr/status.do")
@ResponseBody
public JSONObject status() {
JSONObject json = new JSONObject();
JSONObject data = new JSONObject();
JianRTaskManager manager = JianRTaskManager.getInstance();
data.put("status", manager.isRunning());
data.put("runIndex", manager.getRunIndex());
data.put("taskName", manager.getTaskName());
data.put("log", manager.getLog());
json.put("code", 0);
json.put("data", data);
return json;
}
@RequestMapping("/jianr/task/list.do")
@ResponseBody
public JSONObject tasks() {
JSONObject json = new JSONObject();
JSONArray array = new JSONArray();
Set<String> jianrScript_model = RedisTools.list_get("jianrScript_Model");
array.addAll(jianrScript_model);
json.put("code", 0);
json.put("data", array);
return json;
}
@RequestMapping("/jianr/task/add.do")
@ResponseBody
public JSONObject addTask(String task) {
JSONObject json = new JSONObject();
JSONObject data = JSON.parseObject(task);
if (data == null) {
json.put("code", -1);
json.put("msg", "JSON格式错误");
} else {
String taskName = data.getString("name");
if (RedisTools.list_isExist("jianrScript_Model", taskName)) {
json.put("code", -1);
json.put("msg", "该任务名称已存在");
} else {
RedisTools.list_add("jianrScript_Model", taskName);
RedisTools.set("jianrScript_Model_"+taskName,task);
json.put("code", 0);
json.put("msg", "任务创建成功");
}
}
return json;
}
@RequestMapping("/jianr/task/get.do")
@ResponseBody
public JSONObject getTask (String task){
JSONObject json = new JSONObject();
json.put("code", 0);
json.put("data", RedisTools.get("jianrScript_Model_" + task));
return json;
}
@RequestMapping("/jianr/task/remove.do")
@ResponseBody
public JSONObject removeTask (String task){
RedisTools.remove("jianrScript_Model_" + task);
RedisTools.list_remove("jianrScript_Model", task);
JSONObject json = new JSONObject();
json.put("code", 0);
json.put("msg", "任务删除成功");
return json;
}
}

View File

@@ -0,0 +1,38 @@
package com.yutou.qqbot.data;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class JianRScriptData {
private String name;
private String device;
private List<Script> run;
public void addRun(Script script) {
if(run==null){
run=new ArrayList<>();
}
run.add(script);
}
@Data
public static class Script {
private String name;
private int nextWaitTime;
private int randomNextWaitTime;
private String model;
private int x;
private int y;
private int rx;
private int ry;
public static class ScriptModel {
public static final String CLICK = "click";
public static final String WAIT = "wait";
}
}
}

View File

@@ -0,0 +1,113 @@
package com.yutou.qqbot.utlis;
import com.yutou.qqbot.data.JianRScriptData;
import java.util.Random;
public class JianRTaskManager {
private static JianRTaskManager instance;
private JianRScriptData task;
private boolean running = false;
private int runIndex = 0;
private String log;
public static JianRTaskManager getInstance() {
if (instance == null) {
instance = new JianRTaskManager();
}
return instance;
}
private JianRTaskManager() {
}
public void setTask(JianRScriptData data) {
task = data;
String s = RedisTools.get("jianrScript_RunIndex_" + data.getName());
if (s != null) {
runIndex = Integer.parseInt(s);
}
}
public void start() {
running = true;
new Thread(new Runnable() {
@Override
public void run() {
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);
}
try {
Thread.sleep((long) getRandom(0, script.getRandomNextWaitTime(), script.getNextWaitTime()));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
runIndex++;
RedisTools.set("jianrScript_RunIndex_" + task.getName(), runIndex + "");
log("循环一次任务");
} catch (Exception e) {
running = false;
}
}
log("终止任务");
}
}).start();
}
public void stop() {
task = null;
running = false;
}
public int getRunIndex() {
return runIndex;
}
public boolean isRunning() {
return running;
}
private void adbTap(String deviceId, JianRScriptData.Script script) {
String exec = String.format("adb -s %s shell input tap %f %f",
deviceId,
getRandom(script.getRx(), script.getX()),
getRandom(script.getRy(), script.getY()));
AppTools.exec(exec
, null, false, false);
}
private void log(String log) {
this.log = String.format("[%s]%s",
AppTools.getToDayNowTimeToString(),
log);
}
private float getRandom(int origin, int randomNum, int x) {
Random random = new Random();
return x + random.nextFloat(origin, randomNum);
}
private float getRandom(int randomNum, int x) {
return getRandom(-randomNum, randomNum, x);
}
public String getTaskName() {
if (task != null) {
return task.getName();
}
return "没有任务在运行";
}
public String getLog() {
return log;
}
}