main.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import os
  2. import sys
  3. import time
  4. from model.custom_struct import GameConfig
  5. from model.global_manager import GM
  6. from model.helper import MyHelper
  7. from net.task_api import task_api
  8. from task.task import Task
  9. from tools.log import logger
  10. from tools.thread_pool import MyThreadPoolExecutor
  11. from tools.utils import Utils
  12. # 这些库都是打包需要的
  13. import keyboard
  14. import filelock
  15. import cv2
  16. def main():
  17. try:
  18. # 初始化全局管理
  19. GM.init()
  20. # 创建线程池
  21. executor = MyThreadPoolExecutor(max_workers=GM.device_info.window_nums)
  22. timer = Utils.Timer()
  23. while GM.get_global_control():
  24. if timer.timer('heartbeat', 60):
  25. result,message = task_api.heartbeat(GM.device_info.officer)
  26. logger.info(f'心跳:{message}')
  27. idle_worker_count = executor.get_idle_worker_count()
  28. # 只有当有空闲工作线程时才继续
  29. if idle_worker_count > 0:
  30. window_list = task_api.get_window_list()
  31. for window in window_list:
  32. window_id = window.window_id
  33. # 只处理状态为 0 的窗口
  34. if GM.get_window_status(window_id) == 0:
  35. # 检查更新
  36. GM.updater.check_updates(GM.device_info, window.game_list)
  37. # 检查是否有任务需要执行
  38. for game in window.game_list:
  39. game_info = GameConfig.dict_to_GameConfig(game)
  40. if GM.updater.get_is_updating(game_info.task_id): # 检查是否正在更新
  41. continue
  42. if not game_info.is_execute:
  43. continue
  44. # 取账号信息
  45. result, account_info = task_api.get_account(game_info.task_id,GM.device_info.only_new,GM.device_info.only_retained)
  46. logger.info(f'[窗口-{window_id}]{game_info.task_id}-获取账号:{account_info}',window_id)
  47. if result:
  48. task_api.up_log_profession(account_info.account, game_info.task_id, '拉取账号', '成功')
  49. helper = MyHelper(window_id, game_info, account_info)
  50. # 设置窗口状态为正在执行
  51. GM.set_window_status(window_id, 1)
  52. # 提交任务给线程池异步执行
  53. executor.submit(Task(helper).run)
  54. break # 处理完一个窗口任务后,跳出当前循环,避免重复提交任务
  55. time.sleep(3)
  56. time.sleep(10) # 等待一定时间后重新检查
  57. except Exception as e:
  58. logger.exception(f'主线程异常:{e}')
  59. if __name__ == '__main__':
  60. if Utils.is_admin():
  61. main()
  62. sys.exit()
  63. else:
  64. Utils.run_as_admin()