Skip to content

Commit 27aefd4

Browse files
committed
big refactor(
1 parent fc468aa commit 27aefd4

File tree

7 files changed

+173
-161
lines changed

7 files changed

+173
-161
lines changed

hooks/__init__.py

Lines changed: 45 additions & 135 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,16 @@
77
from mcdreforged.api.all import *
88

99
import hooks.config as cfg
10-
import hooks.schedule_task as schedule_task
10+
import hooks.mount as mount
11+
import hooks.schedule_tasks as schedule_tasks
1112
import hooks.tasks as tasks
1213
import hooks.utils as utils
1314
from hooks.utils import process_arg_server
1415

1516
scripts_folder: str = ''
1617

1718

18-
def stop_all_schedule_daemon_threads():
19-
if len(cfg.temp_config.schedule_daemon_threads) == 0:
20-
return
21-
22-
for thr in cfg.temp_config.schedule_daemon_threads:
23-
thr.break_thread()
24-
cfg.temp_config.schedule_daemon_threads.remove(thr)
25-
26-
27-
def trigger_hooks(hook: tasks.Hooks, server: PluginServerInterface, objects_dict: dict[str, Any] = None):
19+
def trigger_hooks(hook: mount.Hooks, server: PluginServerInterface, objects_dict: dict[str, Any] = None):
2820
if not cfg.config.automatically:
2921
return
3022

@@ -38,7 +30,7 @@ def trigger_hooks(hook: tasks.Hooks, server: PluginServerInterface, objects_dict
3830

3931

4032
@new_thread('hooks - trigger')
41-
def _trigger_hooks(hook: tasks.Hooks, server: PluginServerInterface, objects_dict: dict[str, Any] = None):
33+
def _trigger_hooks(hook: mount.Hooks, server: PluginServerInterface, objects_dict: dict[str, Any] = None):
4234
# 初始化最终变量字典
4335
finally_var_dict = dict()
4436

@@ -78,89 +70,6 @@ def _trigger_hooks(hook: tasks.Hooks, server: PluginServerInterface, objects_dic
7870
e)
7971

8072

81-
def mount_task(hook: str, task: str, src: CommandSource, server: PluginServerInterface):
82-
h = cfg.temp_config.hooks.get(hook)
83-
84-
if h is None:
85-
src.reply(RTextMCDRTranslation('hooks.mount.hook_not_exist', hook))
86-
return
87-
88-
if task in h:
89-
src.reply(RTextMCDRTranslation('hooks.mount.task_already_exist', task, hook))
90-
return
91-
92-
h.append(task)
93-
server.logger.info(f'Successfully mounted task {task}')
94-
src.reply(RTextMCDRTranslation('hooks.mount.success', task, hook))
95-
96-
97-
def unmount_task(hook: str, task: str, src: CommandSource, server: PluginServerInterface):
98-
h = cfg.temp_config.hooks.get(hook)
99-
100-
if h is None:
101-
src.reply(RTextMCDRTranslation('hooks.mount.hook_not_exist', hook))
102-
return
103-
104-
if task not in h:
105-
src.reply(RTextMCDRTranslation('hooks.mount.task_not_exist', task))
106-
return
107-
108-
h.remove(task)
109-
server.logger.info(f'Successfully unmounted task {task}')
110-
src.reply(RTextMCDRTranslation('hooks.mount.unmount', hook, task))
111-
112-
113-
def create_task(task_type: str, command: str, name: str, src: CommandSource, server: PluginServerInterface,
114-
is_schedule=False, exec_interval=0, created_by=None):
115-
if name in cfg.temp_config.task:
116-
src.reply(RTextMCDRTranslation('hooks.create.already_exist'))
117-
return
118-
119-
if name is None or len(name) == 0:
120-
return
121-
122-
try:
123-
tsk_type = tasks.TaskType(task_type)
124-
except ValueError:
125-
src.reply(RTextMCDRTranslation('hooks.create.task_type_wrong', task_type))
126-
return
127-
128-
if created_by is None:
129-
created_by = str(src)
130-
131-
if not is_schedule:
132-
cfg.temp_config.task[name] = tasks.Task(name=name, task_type=tsk_type, command=command, created_by=created_by)
133-
else:
134-
var1 = schedule_task.ScheduleTask(name=name, task_type=tsk_type, command=command, created_by=created_by,
135-
server_inst=server, exec_interval=exec_interval)
136-
cfg.temp_config.task[name] = var1
137-
var1.start()
138-
139-
server.logger.info(f'Successfully created task {name}')
140-
src.reply(RTextMCDRTranslation('hooks.create.success', name))
141-
142-
143-
def delete_task(name: str, src: CommandSource, server: PluginServerInterface):
144-
if name not in cfg.temp_config.task.keys():
145-
src.reply(RTextMCDRTranslation('hooks.mount.task_not_exist', name))
146-
return
147-
148-
for hook in cfg.temp_config.hooks.keys():
149-
for tasks_in_hook in cfg.temp_config.hooks.get(hook):
150-
if tasks_in_hook == name:
151-
unmount_task(hook, name, src, server)
152-
153-
var1 = cfg.temp_config.task.get(name)
154-
if isinstance(var1, schedule_task.ScheduleTask):
155-
var1.break_thread()
156-
cfg.temp_config.schedule_daemon_threads.remove(var1)
157-
158-
cfg.temp_config.task.pop(name)
159-
160-
server.logger.info(f'Successfully deleted task {name}')
161-
src.reply(RTextMCDRTranslation('hooks.delete.success', name))
162-
163-
16473
@new_thread('hooks - list')
16574
def list_task(src: CommandSource):
16675
rtext_list = RTextList()
@@ -183,7 +92,7 @@ def list_task(src: CommandSource):
18392
def list_mount(src: CommandSource):
18493
list_hooks: list = list()
18594

186-
for hk in dict(tasks.Hooks.__members__).keys():
95+
for hk in dict(mount.Hooks.__members__).keys():
18796
list_hooks.append(str(cfg.temp_config.hooks.get(str(hk))))
18897

18998
src.reply(RTextMCDRTranslation('hooks.list.mount', *list_hooks))
@@ -203,7 +112,7 @@ def list_scripts(src: CommandSource):
203112

204113

205114
def reload_config(src: CommandSource, server: PluginServerInterface):
206-
stop_all_schedule_daemon_threads()
115+
schedule_tasks.stop_all_schedule_daemon_threads()
207116

208117
cfg.temp_config = cfg.TempConfig()
209118
cfg.config = server.load_config_simple(target_class=cfg.Configuration)
@@ -225,12 +134,12 @@ def man_run_task(task: str, env_str: str, src: CommandSource, server: PluginServ
225134
return
226135

227136
try:
228-
cfg.temp_config.task.get(task).execute_task(server, tasks.Hooks.undefined.value, var_dict=env_dict,
137+
cfg.temp_config.task.get(task).execute_task(server, mount.Hooks.undefined.value, var_dict=env_dict,
229138
obj_dict=env_dict)
230139
src.reply(RTextMCDRTranslation('hooks.man_run.success', task))
231140
except Exception as e:
232141
server.logger.exception(
233-
f'Unexpected exception when executing task {task}, hook {tasks.Hooks.undefined.value}, '
142+
f'Unexpected exception when executing task {task}, hook {mount.Hooks.undefined.value}, '
234143
f'task_type {cfg.temp_config.task.get(task).task_type}, command {cfg.temp_config.task.get(task).command}',
235144
e)
236145

@@ -263,20 +172,20 @@ def _parse_and_apply_scripts(script: str, server: PluginServerInterface):
263172
with open(cmd_file_path, 'r') as command_file:
264173
command_file_content = command_file.read()
265174
# 创建task
266-
create_task(task.get('task_type'), command_file_content, task.get('name'),
267-
server.get_plugin_command_source(),
268-
server, created_by=script)
175+
tasks.create_task(task.get('task_type'), command_file_content, task.get('name'),
176+
server.get_plugin_command_source(),
177+
server, created_by=script)
269178
else:
270179
# 创建task
271-
create_task(task.get('task_type'), task.get('command'), task.get('name'),
272-
server.get_plugin_command_source(),
273-
server, created_by=script)
180+
tasks.create_task(task.get('task_type'), task.get('command'), task.get('name'),
181+
server.get_plugin_command_source(),
182+
server, created_by=script)
274183

275184
if task.get('hooks') is None:
276185
continue
277186
for hook in task.get('hooks'):
278187
# 挂载
279-
mount_task(hook, task.get('name'), server.get_plugin_command_source(), server)
188+
mount.mount_task(hook, task.get('name'), server.get_plugin_command_source(), server)
280189

281190
if content.get('schedule_tasks') is not None:
282191
for schedule in content.get('schedule_tasks'):
@@ -302,22 +211,22 @@ def _parse_and_apply_scripts(script: str, server: PluginServerInterface):
302211
with open(cmd_file_path, 'r') as command_file:
303212
command_file_content = command_file.read()
304213
# 创建task
305-
create_task(schedule.get('task_type'), command_file_content, schedule.get('name'),
306-
server.get_plugin_command_source(),
307-
server, created_by=script, is_schedule=True,
308-
exec_interval=schedule.get('exec_interval'))
214+
tasks.create_task(schedule.get('task_type'), command_file_content, schedule.get('name'),
215+
server.get_plugin_command_source(),
216+
server, created_by=script, is_schedule=True,
217+
exec_interval=schedule.get('exec_interval'))
309218
else:
310219
# 创建task
311-
create_task(schedule.get('task_type'), schedule.get('command'), schedule.get('name'),
312-
server.get_plugin_command_source(),
313-
server, created_by=script, is_schedule=True,
314-
exec_interval=schedule.get('exec_interval'))
220+
tasks.create_task(schedule.get('task_type'), schedule.get('command'), schedule.get('name'),
221+
server.get_plugin_command_source(),
222+
server, created_by=script, is_schedule=True,
223+
exec_interval=schedule.get('exec_interval'))
315224

316225
if schedule.get('hooks') is None:
317226
continue
318227
for hook in schedule.get('hooks'):
319228
# 挂载
320-
mount_task(hook, schedule.get('name'), server.get_plugin_command_source(), server)
229+
mount.mount_task(hook, schedule.get('name'), server.get_plugin_command_source(), server)
321230
except Exception as e:
322231
server.logger.exception(f'Unexpected exception when parse or apply scripts {os.path.basename(script)}! Please '
323232
f'check your scripts.', e)
@@ -380,7 +289,8 @@ def on_load(server: PluginServerInterface, old_module):
380289
.then(
381290
GreedyText('command')
382291
.requires(lambda src: src.has_permission(3))
383-
.runs(lambda src, ctx: create_task(ctx['task_type'], ctx['command'], ctx['name'], src, server))
292+
.runs(lambda src, ctx: tasks.create_task(ctx['task_type'], ctx['command'], ctx['name'], src,
293+
server))
384294
)
385295
)
386296
)
@@ -396,9 +306,9 @@ def on_load(server: PluginServerInterface, old_module):
396306
.then(
397307
GreedyText('command')
398308
.requires(lambda src: src.has_permission(3))
399-
.runs(lambda src, ctx: create_task(ctx['task_type'], ctx['command'], ctx['name'], src,
400-
server, is_schedule=True,
401-
exec_interval=ctx['exec_interval']))
309+
.runs(lambda src, ctx: tasks.create_task(ctx['task_type'], ctx['command'], ctx['name'], src,
310+
server, is_schedule=True,
311+
exec_interval=ctx['exec_interval']))
402312
)
403313
)
404314
)
@@ -411,7 +321,7 @@ def on_load(server: PluginServerInterface, old_module):
411321
.then(
412322
Text('hook')
413323
.requires(lambda src: src.has_permission(3))
414-
.runs(lambda src, ctx: mount_task(ctx['hook'], ctx['task'], src, server))
324+
.runs(lambda src, ctx: mount.mount_task(ctx['hook'], ctx['task'], src, server))
415325
)
416326
)
417327
)
@@ -422,7 +332,7 @@ def on_load(server: PluginServerInterface, old_module):
422332
.then(
423333
Text('hook')
424334
.requires(lambda src: src.has_permission(3))
425-
.runs(lambda src, ctx: unmount_task(ctx['hook'], ctx['task'], src, server))
335+
.runs(lambda src, ctx: mount.unmount_task(ctx['hook'], ctx['task'], src, server))
426336
)
427337
)
428338
)
@@ -431,7 +341,7 @@ def on_load(server: PluginServerInterface, old_module):
431341
.then(
432342
Text('task')
433343
.requires(lambda src: src.has_permission(3))
434-
.runs(lambda src, ctx: delete_task(ctx['task'], src, server))
344+
.runs(lambda src, ctx: tasks.delete_task(ctx['task'], src, server))
435345
)
436346
)
437347
.then(
@@ -470,55 +380,55 @@ def on_load(server: PluginServerInterface, old_module):
470380
)
471381
)
472382

473-
trigger_hooks(tasks.Hooks.on_plugin_loaded, server,
383+
trigger_hooks(mount.Hooks.on_plugin_loaded, server,
474384
{'server': process_arg_server(server), 'old_module': old_module})
475385

476386

477387
def on_unload(server: PluginServerInterface):
478-
stop_all_schedule_daemon_threads()
388+
schedule_tasks.stop_all_schedule_daemon_threads()
479389

480-
trigger_hooks(tasks.Hooks.on_plugin_unloaded, server, {'server': process_arg_server(server)})
390+
trigger_hooks(mount.Hooks.on_plugin_unloaded, server, {'server': process_arg_server(server)})
481391

482392
server.save_config_simple(cfg.config)
483393

484394

485395
def on_info(server: PluginServerInterface, info: Info):
486-
trigger_hooks(tasks.Hooks.on_info, server, {'server': process_arg_server(server), 'info': info})
396+
trigger_hooks(mount.Hooks.on_info, server, {'server': process_arg_server(server), 'info': info})
487397

488398

489399
def on_user_info(server: PluginServerInterface, info: Info):
490-
trigger_hooks(tasks.Hooks.on_user_info, server, {'server': process_arg_server(server), 'info': info})
400+
trigger_hooks(mount.Hooks.on_user_info, server, {'server': process_arg_server(server), 'info': info})
491401

492402

493403
def on_player_joined(server: PluginServerInterface, player: str, info: Info):
494-
trigger_hooks(tasks.Hooks.on_player_joined, server,
404+
trigger_hooks(mount.Hooks.on_player_joined, server,
495405
{'server': process_arg_server(server), 'info': info, 'player': player})
496406

497407

498408
def on_player_left(server: PluginServerInterface, player: str):
499-
trigger_hooks(tasks.Hooks.on_player_left, server, {'server': process_arg_server(server), 'player': player})
409+
trigger_hooks(mount.Hooks.on_player_left, server, {'server': process_arg_server(server), 'player': player})
500410

501411

502412
def on_server_start(server: PluginServerInterface):
503-
trigger_hooks(tasks.Hooks.on_server_starting, server, {'server': process_arg_server(server)})
413+
trigger_hooks(mount.Hooks.on_server_starting, server, {'server': process_arg_server(server)})
504414

505415

506416
def on_server_startup(server: PluginServerInterface):
507-
trigger_hooks(tasks.Hooks.on_server_started, server, {'server': process_arg_server(server)})
417+
trigger_hooks(mount.Hooks.on_server_started, server, {'server': process_arg_server(server)})
508418

509419

510420
def on_server_stop(server: PluginServerInterface, return_code: int):
511421
if return_code != 0:
512-
trigger_hooks(tasks.Hooks.on_server_crashed, server,
422+
trigger_hooks(mount.Hooks.on_server_crashed, server,
513423
{'server': process_arg_server(server), 'return_code': return_code})
514424
else:
515-
trigger_hooks(tasks.Hooks.on_server_stopped, server,
425+
trigger_hooks(mount.Hooks.on_server_stopped, server,
516426
{'server': process_arg_server(server), 'return_code': return_code})
517427

518428

519429
def on_mcdr_start(server: PluginServerInterface):
520-
trigger_hooks(tasks.Hooks.on_mcdr_started, server, {'server': process_arg_server(server)})
430+
trigger_hooks(mount.Hooks.on_mcdr_started, server, {'server': process_arg_server(server)})
521431

522432

523433
def on_mcdr_stop(server: PluginServerInterface):
524-
trigger_hooks(tasks.Hooks.on_mcdr_stopped, server, {'server': process_arg_server(server)})
434+
trigger_hooks(mount.Hooks.on_mcdr_stopped, server, {'server': process_arg_server(server)})

hooks/config.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
from typing import List
1+
from typing import List, Any
22

33
from mcdreforged.api.all import Serializable
44

5-
import hooks.tasks as tasks
6-
75

86
class Configuration(Serializable):
97
def __init__(self, **kwargs):
@@ -39,7 +37,7 @@ def __init__(self):
3937

4038
hooks: dict[str, List[str]]
4139

42-
task: dict[str, tasks.Task]
40+
task: dict[str, Any]
4341

4442
scripts_list: dict[str, str]
4543

0 commit comments

Comments
 (0)