This commit is contained in:
parent
70d30c59b9
commit
e02930a3b9
4 changed files with 32 additions and 31 deletions
|
@ -1,5 +1,4 @@
|
||||||
from __future__ import annotations
|
import gc
|
||||||
|
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from importlib import import_module
|
from importlib import import_module
|
||||||
from typing import Any, Callable, Literal
|
from typing import Any, Callable, Literal
|
||||||
|
@ -9,6 +8,8 @@ from mower.utils import typealias as tp
|
||||||
from mower.utils.csleep import csleep
|
from mower.utils.csleep import csleep
|
||||||
from mower.utils.log import logger, save_screenshot
|
from mower.utils.log import logger, save_screenshot
|
||||||
|
|
||||||
|
from .emulator import restart_emulator
|
||||||
|
|
||||||
method_map = {
|
method_map = {
|
||||||
"adb": "mower.utils.device.method.adb.ADB",
|
"adb": "mower.utils.device.method.adb.ADB",
|
||||||
"droidcast": "mower.utils.device.method.droidcast.DroidCast",
|
"droidcast": "mower.utils.device.method.droidcast.DroidCast",
|
||||||
|
@ -176,3 +177,16 @@ class Device:
|
||||||
"""
|
"""
|
||||||
config.check_screen = self.app_control.check_device_screen()
|
config.check_screen = self.app_control.check_device_screen()
|
||||||
return config.check_screen
|
return config.check_screen
|
||||||
|
|
||||||
|
def idle_solver(self, strategy=True):
|
||||||
|
if strategy:
|
||||||
|
if config.conf.strategy_when_idle == "close_emulator":
|
||||||
|
restart_emulator(start=False)
|
||||||
|
elif config.conf.strategy_when_idle == "exit_game" and config.device:
|
||||||
|
config.device.exit()
|
||||||
|
elif config.conf.strategy_when_idle == "switch_to_home":
|
||||||
|
config.device.home()
|
||||||
|
if config.conf.kill_server_when_idle:
|
||||||
|
for service in config.device.services.values():
|
||||||
|
service.kill_server()
|
||||||
|
gc.collect()
|
||||||
|
|
|
@ -1,11 +1,8 @@
|
||||||
import functools
|
import functools
|
||||||
import gc
|
|
||||||
|
|
||||||
import networkx as nx
|
import networkx as nx
|
||||||
|
|
||||||
from mower.utils import config
|
|
||||||
from mower.utils.csleep import MowerExit
|
from mower.utils.csleep import MowerExit
|
||||||
from mower.utils.device.emulator import restart_emulator
|
|
||||||
from mower.utils.log import logger
|
from mower.utils.log import logger
|
||||||
from mower.utils.scene import Scene, SceneComment
|
from mower.utils.scene import Scene, SceneComment
|
||||||
from mower.utils.solver import BaseSolver
|
from mower.utils.solver import BaseSolver
|
||||||
|
@ -77,19 +74,6 @@ class SceneGraphSolver(BaseSolver):
|
||||||
logger.exception(f"场景转移异常:{e}")
|
logger.exception(f"场景转移异常:{e}")
|
||||||
self.sleep()
|
self.sleep()
|
||||||
|
|
||||||
def idle_solver(self):
|
|
||||||
if config.conf.strategy_when_idle == "close_emulator":
|
|
||||||
restart_emulator(start=False)
|
|
||||||
elif config.conf.strategy_when_idle == "exit_game" and config.device:
|
|
||||||
config.device.exit()
|
|
||||||
elif config.conf.strategy_when_idle == "switch_to_home":
|
|
||||||
self.back_to_index()
|
|
||||||
config.device.home()
|
|
||||||
if config.conf.kill_server_when_idle:
|
|
||||||
for service in config.device.services.values():
|
|
||||||
service.kill_server()
|
|
||||||
gc.collect()
|
|
||||||
|
|
||||||
def back_to_index(self):
|
def back_to_index(self):
|
||||||
self.scene_graph_navigation(Scene.INDEX)
|
self.scene_graph_navigation(Scene.INDEX)
|
||||||
|
|
||||||
|
|
|
@ -7,8 +7,8 @@ from importlib import import_module
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
from mower.static import clear_data
|
from mower.static import clear_data
|
||||||
|
from mower.utils import config
|
||||||
from mower.utils.csleep import MowerExit, csleep
|
from mower.utils.csleep import MowerExit, csleep
|
||||||
from mower.utils.graph import SceneGraphSolver
|
|
||||||
from mower.utils.log import logger
|
from mower.utils.log import logger
|
||||||
|
|
||||||
|
|
||||||
|
@ -133,7 +133,7 @@ class LongTask(BasicTask):
|
||||||
Task = OneTimeTask | PeriodicTask | DailyTask | LongTask
|
Task = OneTimeTask | PeriodicTask | DailyTask | LongTask
|
||||||
|
|
||||||
|
|
||||||
class Scheduler(SceneGraphSolver):
|
class Scheduler:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.priority_queue: list[Task] = [] # 小于当前时间的待执行队列,按优先级排序
|
self.priority_queue: list[Task] = [] # 小于当前时间的待执行队列,按优先级排序
|
||||||
self.time_queue: list[Task] = [] # 大于当前时间的等待队列,按时间排序
|
self.time_queue: list[Task] = [] # 大于当前时间的等待队列,按时间排序
|
||||||
|
@ -221,9 +221,11 @@ class Scheduler(SceneGraphSolver):
|
||||||
else:
|
else:
|
||||||
# 如果没有需要立即执行的任务,休息
|
# 如果没有需要立即执行的任务,休息
|
||||||
sleep_time = self.time_queue[0]._next_execution(now) - now
|
sleep_time = self.time_queue[0]._next_execution(now) - now
|
||||||
if sleep_time > timedelta(minutes=3):
|
if sleep_time > timedelta(minutes=3) and config.device:
|
||||||
self.idle_solver()
|
config.device.idle_solver()
|
||||||
csleep(sleep_time.total_seconds())
|
csleep(sleep_time.total_seconds())
|
||||||
|
if config.recog:
|
||||||
|
config.recog.update()
|
||||||
|
|
||||||
except MowerExit:
|
except MowerExit:
|
||||||
logger.info("停止运行调度器")
|
logger.info("停止运行调度器")
|
||||||
|
|
19
server.py
19
server.py
|
@ -1,4 +1,5 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
import gc
|
||||||
import json
|
import json
|
||||||
import mimetypes
|
import mimetypes
|
||||||
import os
|
import os
|
||||||
|
@ -267,25 +268,25 @@ def start():
|
||||||
@app.route("/stop")
|
@app.route("/stop")
|
||||||
@get_require_token
|
@get_require_token
|
||||||
def stop():
|
def stop():
|
||||||
from mower.utils.graph.utils import SceneGraphSolver
|
|
||||||
|
|
||||||
global mower_thread
|
global mower_thread
|
||||||
|
|
||||||
if mower_thread is None:
|
if mower_thread is None:
|
||||||
return "true"
|
return "true"
|
||||||
if config.device.check_service_start() and config.recog:
|
|
||||||
SceneGraphSolver().idle_solver()
|
|
||||||
config.stop_mower.set()
|
config.stop_mower.set()
|
||||||
|
|
||||||
mower_thread.join(10)
|
mower_thread.join(10)
|
||||||
if mower_thread.is_alive():
|
if mower_thread.is_alive():
|
||||||
logger.error("mower-ng线程仍在运行")
|
logger.error("mower-ng线程仍在运行")
|
||||||
return "false"
|
return "false"
|
||||||
else:
|
logger.info("成功停止mower-ng线程")
|
||||||
logger.info("成功停止mower-ng线程")
|
mower_thread = None
|
||||||
mower_thread = None
|
config.idle = True
|
||||||
config.idle = True
|
|
||||||
return "true"
|
if config.conf.kill_server_when_idle:
|
||||||
|
for service in config.device.services.values():
|
||||||
|
service.kill_server()
|
||||||
|
gc.collect()
|
||||||
|
return "true"
|
||||||
|
|
||||||
|
|
||||||
@app.route("/stop-maa")
|
@app.route("/stop-maa")
|
||||||
|
|
Loading…
Add table
Reference in a new issue