app.py 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. # -*- coding: utf-8 -*-
  2. import datetime
  3. from flask import Flask, render_template
  4. from flask_socketio import SocketIO, emit
  5. from scriptBase.comon import *
  6. import pyautogui
  7. import base64
  8. import threading
  9. from yys_task import *
  10. from collections import deque
  11. import json
  12. app = Flask(__name__)
  13. socketio = SocketIO(app)
  14. event = threading.Event()
  15. g_status = ''
  16. last_time = 0.0
  17. task_queue = deque()
  18. last_process = ''
  19. isGameBegin = True
  20. autoTask = None
  21. isReset = False
  22. def thread_runTask():
  23. global last_process
  24. global task_queue,isReset
  25. while True:
  26. if event.is_set():
  27. task_queue.clear()
  28. if len(task_queue) != 0:
  29. task = task_queue[-1]
  30. task_queue.pop()
  31. last_process = task.name
  32. task.run()
  33. myTimeSleep_small()
  34. else:
  35. myTimeSleep_big()
  36. if isReset:
  37. isReset = False
  38. restart_game()
  39. @app.route('/')
  40. def index():
  41. return render_template('index.html')
  42. @socketio.on('connect')
  43. def handle_connect():
  44. print('Client connected')
  45. @socketio.on('disconnect')
  46. def handle_disconnect():
  47. print('Client disconnected')
  48. def send_hint(msg):#数组信息
  49. emit('processing_hint', msg)
  50. def send_status(msg):#软件执行状态
  51. global g_status
  52. try:
  53. if msg == '':
  54. emit('processing_status', g_status)
  55. return
  56. else:
  57. g_status = msg
  58. if msg == "结束":
  59. event.clear()
  60. emit('processing_status', msg)
  61. except:
  62. return
  63. def send_todo():#软件执行状态
  64. try:
  65. if msg == '':
  66. emit('processing_status', g_status)
  67. return
  68. else:
  69. g_status = msg
  70. if msg == "结束":
  71. event.clear()
  72. emit('processing_status', msg)
  73. except:
  74. return
  75. @socketio.on('monitor_begin')
  76. def monitor_begin():
  77. global last_time, last_process
  78. current_time = time.time()
  79. elapsed_time = current_time - last_time
  80. if elapsed_time < 0.5:
  81. return
  82. last_time = current_time
  83. screenshot = pyautogui.screenshot()
  84. binary_img = binarize_image(screenshot)
  85. compressed_data = compress_image(binary_img)
  86. image_data_base64 = base64.b64encode(compressed_data).decode('utf-8')
  87. socketio.emit('image_data', image_data_base64)
  88. task_arr = []
  89. if not event.is_set():
  90. task_arr.append(last_process)
  91. for item in reversed(task_queue):
  92. task_arr.append(item.name)
  93. send_hint(json.dumps(task_arr, ensure_ascii=False))
  94. send_status('')
  95. #print("send img")
  96. @socketio.on('end_script')
  97. def handle_end_script():
  98. event.set()
  99. @socketio.on('end_game')
  100. def handle_end_game():
  101. event.set()
  102. task_close_game()
  103. send_status("结束")
  104. event.clear()
  105. @socketio.on('beigin_baigui')
  106. def handle_beigin_baigui():
  107. task_queue.append(task_baigui())
  108. @socketio.on('get_title')
  109. def handle_get_title():
  110. str = task_getComputerName()
  111. dst = str + ' machine'
  112. emit('processing_title', dst)
  113. @socketio.on('reset_script')
  114. def handle_reset_script():
  115. python = sys.executable
  116. while '--reset' in sys.argv:
  117. # 从 sys.argv 列表中删除 --reset 参数
  118. sys.argv.remove('--reset')
  119. os.execl(python, python, *sys.argv)
  120. @socketio.on('restart_game')
  121. def handle_restart_game():
  122. python = sys.executable
  123. os.execl(python, python, *sys.argv, '--reset')
  124. def restart_game():
  125. global isGameBegin, autoTask
  126. isGameBegin = False
  127. while True:
  128. task_close_game()
  129. if True == task_start_game():
  130. break
  131. else:
  132. send_status("启动失败")
  133. isGameBegin = True
  134. send_status("结束")
  135. auto_task(None)
  136. @socketio.on('begin_tansuo')
  137. def handle_begin_tansuo(data):
  138. pageNum = data['pageNum'], timesNum = data['timesNum']
  139. for i in range(1, timesNum + 1):
  140. task_queue.append(task_tansuo(pageNum))
  141. @socketio.on('begin_teamer')
  142. def handle_begin_teamer():
  143. task_queue.appendleft(task_fightzuidui())
  144. @socketio.on('begin_yuhun')
  145. def handle_begin_yuhun():
  146. task_queue.appendleft(task_yuhun())
  147. @socketio.on('begin_tupo')
  148. def handle_begin_tupo():
  149. task_queue.append(task_topo(3))
  150. @socketio.on('begin_AddPersion')
  151. def handle_begin_AddPersion():
  152. task_queue.append(task_AddPerson(20))
  153. @socketio.on('begin_jiyang')
  154. def handle_begin_jiyang():
  155. task_queue.append(task_jiyang())
  156. @socketio.on('begin_zhaohuan')
  157. def handle_begin_zhaohuan():
  158. task_queue.append(task_zhaohuan())
  159. @socketio.on('begin_yeyuanhuo')
  160. def handle_begin_yeyuanhuo():
  161. task_queue.append(task_yeyuanhuo())
  162. def add_auto_task(pageNum):
  163. global isGameBegin
  164. tmp_num = 0
  165. ten_pm = datetime.time(4, 0, 0)
  166. three_am = datetime.time(5, 0, 0)
  167. ten_am = datetime.time(10, 0, 0)
  168. while not event.is_set():
  169. if len(task_queue) != 0:
  170. time.sleep(5)
  171. continue
  172. current_time = datetime.datetime.now().time()
  173. if current_time > three_am and current_time < ten_am:
  174. task_close_game()
  175. time.sleep(1000)
  176. isGameBegin = False
  177. continue
  178. if isGameBegin == False:
  179. while True:
  180. task_close_game()
  181. if True == task_start_game():
  182. break
  183. isGameBegin = True
  184. time.sleep(200)
  185. tansuo_times = random.randint(3, 6)
  186. tupo_times = 3
  187. liaotupo_times = 0
  188. if current_time < ten_pm:
  189. liaotupo_times = 2
  190. for i in range(liaotupo_times):
  191. task_queue.appendleft(task_topo(2, False))
  192. for i in range(tansuo_times):
  193. task_queue.appendleft(task_tansuo(pageNum))
  194. for i in range(tupo_times):
  195. task_queue.appendleft(task_topo(2))
  196. task_queue.appendleft(task_jiyang())
  197. task_queue.clear()
  198. send_status(f'自动模式结束')
  199. event.clear()
  200. @socketio.on('begin_auto')
  201. def handle_auto(data):
  202. auto_task(data)
  203. def auto_task(data):
  204. global autoTask
  205. if data == None:
  206. pageNum = 28
  207. else:
  208. pageNum = data['pageNum']
  209. send_status(f'开始自动模式')
  210. autoTask = threading.Thread(target=add_auto_task, args=(pageNum,))#启动线程往里面添加任务
  211. autoTask.daemon = True
  212. autoTask.start()
  213. @socketio.on('begin_daoguan')
  214. def handle_begin_daoguan():
  215. while not event.is_set():
  216. task_daoguan()
  217. send_status("结束")
  218. @socketio.on('begin_douji')
  219. def handle_begin_douji():
  220. task_queue.append(task_douji(20))
  221. @socketio.on('begin_chaoguiwang')
  222. def handle_begin_chaoguiwang():
  223. task_queue.append(task_chaoguiwang())
  224. if __name__ == '__main__':
  225. init()
  226. if '--reset' in sys.argv:
  227. isReset = True
  228. print("需要重启游戏")
  229. runTask = threading.Thread(target=thread_runTask)#启动线程往里面添加任务
  230. runTask.daemon = True
  231. runTask.start()
  232. socketio.run(app, host= '0.0.0.0', debug=True)