33# WeAuth is released under the GNU GENERAL PUBLIC LICENSE v3 (GPLv3.0) license.
44# https://github.com/nearlyheadlessjack/weauth
55# 程序总入口
6+ import time
67from email .policy import default
78import sys
89from http .client import responses
2021from weauth .constants .core_constant import *
2122from weauth .constants import exit_code
2223from weauth .mc_server import MCServerConnection
23-
24+ from multiprocessing import Process
25+ import threading
26+ from weauth .utils .backup import BackUp
2427
2528def main (args ) -> None :
2629 """应用程序入口"""
@@ -44,6 +47,8 @@ def main(args) -> None:
4447 DB .check_database ()
4548 default_config = {
4649 'server_connect' : 0 ,
50+ 'backup' : 1 ,
51+ 'backup_cron' : '0 2 * * *' ,
4752 'welcome' : '欢迎加入我的服务器!\\ n如果仍然无法加入服务器, 请联系管理员。\\ n祝您游戏愉快!' ,
4853 'mcsm_adr' : 'http://127.0.0.1:23333/' ,
4954 'mcsm_api' : '12345' ,
@@ -109,6 +114,9 @@ def main(args) -> None:
109114
110115
111116 url = config ['url' ]
117+ backup_ = config ['backup' ]
118+ cron = config ['backup_cron' ]
119+
112120 if args .url != '/wx' :
113121 url = args .url
114122
@@ -120,27 +128,17 @@ def main(args) -> None:
120128 'welcome' : config ['welcome' ] # 玩家注册白名单成功
121129 }
122130
123- # 创建Flask实例
124- print ("-正在启动监听......\n " )
125- listener = Listener (wx_user_name = config ['WxUserName' ], responses = responses , url = url , game_server = game_server )
131+ # 创建监听进程
132+ weauth_server = Process (target = server_start , args = (config , responses , url , game_server ))
126133
127- if config ['ssl' ] == 1 :
128- ssl_context = ssl .SSLContext (ssl .PROTOCOL_TLS_SERVER )
129- try :
130- ssl_context .load_cert_chain (certfile = config ['ssl_cer' ], keyfile = config ['ssl_key' ])
131- except FileNotFoundError :
132- print ('-未找到ssl证书文件!' )
133- sys .exit (0 )
134- server = pywsgi .WSGIServer (('0.0.0.0' , 443 ), listener .wx_service ,
135- ssl_context = ssl_context )
136- print (f"-开始在 https://0.0.0.0{ url } 进行监听" )
137- server .serve_forever ()
138- else :
139- # 核心监听程序运行
140- server = pywsgi .WSGIServer (('0.0.0.0' , 80 ), listener .wx_service )
141- print (f"-开始在 http://0.0.0.0{ url } 进行监听" )
142- server .serve_forever ()
134+ if backup_ == 1 :
135+ # 创建备份管理系统线程
136+ print ('-正在创建备份任务' )
137+ backup_thread = threading .Thread (target = backup_server , args = (cron ,))
138+ weauth_server .daemon = True
139+ backup_thread .start ()
143140
141+ weauth_server .start ()
144142
145143
146144# 读取配置文件
@@ -190,6 +188,35 @@ def check_config_version(config:dict,default_config:dict):
190188 create_config_yaml (config = config ,default_config = default_config )
191189
192190
191+ def server_start (config : dict , responses : dict , url : str , game_server : MCServerConnection ) -> None :
192+ # 创建Flask实例
193+ print ("-正在启动监听......\n " )
194+ listener = Listener (wx_user_name = config ['WxUserName' ], responses = responses , url = url , game_server = game_server )
193195
196+ if config ['ssl' ] == 1 :
197+ ssl_context = ssl .SSLContext (ssl .PROTOCOL_TLS_SERVER )
198+ try :
199+ ssl_context .load_cert_chain (certfile = config ['ssl_cer' ], keyfile = config ['ssl_key' ])
200+ except FileNotFoundError :
201+ print ('-未找到ssl证书文件!' )
202+ sys .exit (0 )
203+ server = pywsgi .WSGIServer (('0.0.0.0' , 443 ), listener .wx_service ,
204+ ssl_context = ssl_context )
205+ print (f"-开始在 https://0.0.0.0{ url } 进行监听" )
206+ server .serve_forever ()
207+ else :
208+ # 核心监听程序运行
209+ server = pywsgi .WSGIServer (('0.0.0.0' , 80 ), listener .wx_service )
210+ print (f"-开始在 http://0.0.0.0{ url } 进行监听" )
211+ server .serve_forever ()
212+
213+
214+ def backup_server (cron : str ) -> None :
215+ try :
216+ backup_task = BackUp (cron )
217+ print (backup_task .next ())
218+ backup_task .run ()
194219
195-
220+ except ValueError :
221+ print ('\033 [31m-备份系统计划设置错误,请检查config.yaml中的backup_cron设置是否正确\033 [0m' )
222+ sys .exit (0 )
0 commit comments