| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- import os
- import sys
- import time
- from model.custom_struct import GameConfig
- from model.global_manager import GM
- from model.helper import MyHelper
- from net.task_api import task_api
- from task.task import Task
- from tools.log import logger
- from tools.thread_pool import MyThreadPoolExecutor
- from tools.utils import Utils
- # 这些库都是打包需要的
- import keyboard
- import filelock
- import cv2
- def main():
- try:
- # 初始化全局管理
- GM.init()
- # 创建线程池
- executor = MyThreadPoolExecutor(max_workers=GM.device_info.window_nums)
- timer = Utils.Timer()
- while GM.get_global_control():
- if timer.timer('heartbeat', 60):
- result,message = task_api.heartbeat(GM.device_info.officer)
- logger.info(f'心跳:{message}')
- idle_worker_count = executor.get_idle_worker_count()
- # 只有当有空闲工作线程时才继续
- if idle_worker_count > 0:
- window_list = task_api.get_window_list()
- for window in window_list:
- window_id = window.window_id
- # 只处理状态为 0 的窗口
- if GM.get_window_status(window_id) == 0:
- # 检查更新
- GM.updater.check_updates(GM.device_info, window.game_list)
- # 检查是否有任务需要执行
- for game in window.game_list:
- game_info = GameConfig.dict_to_GameConfig(game)
- if GM.updater.get_is_updating(game_info.task_id): # 检查是否正在更新
- continue
- if not game_info.is_execute:
- continue
- # 取账号信息
- result, account_info = task_api.get_account(game_info.task_id,GM.device_info.only_new,GM.device_info.only_retained)
- logger.info(f'[窗口-{window_id}]{game_info.task_id}-获取账号:{account_info}',window_id)
- if result:
- task_api.up_log_profession(account_info.account, game_info.task_id, '拉取账号', '成功')
- helper = MyHelper(window_id, game_info, account_info)
- # 设置窗口状态为正在执行
- GM.set_window_status(window_id, 1)
- # 提交任务给线程池异步执行
- executor.submit(Task(helper).run)
- break # 处理完一个窗口任务后,跳出当前循环,避免重复提交任务
- time.sleep(3)
- time.sleep(10) # 等待一定时间后重新检查
- except Exception as e:
- logger.exception(f'主线程异常:{e}')
- if __name__ == '__main__':
- if Utils.is_admin():
- main()
- sys.exit()
- else:
- Utils.run_as_admin()
|