feat: 持久化和 web 接口基础架构

This commit is contained in:
RockChinQ
2024-10-11 22:27:53 +08:00
parent 21f153e5c3
commit 7c3557e943
26 changed files with 462 additions and 22 deletions

View File

@@ -17,11 +17,18 @@ from ..plugin import manager as plugin_mgr
from ..pipeline import pool
from ..pipeline import controller, stagemgr
from ..utils import version as version_mgr, proxy as proxy_mgr, announce as announce_mgr
from ..persistence import mgr as persistencemgr
from ..api.http.controller import main as http_controller
from ..utils import logcache
class Application:
"""运行时应用对象和上下文"""
event_loop: asyncio.AbstractEventLoop = None
asyncio_tasks: list[asyncio.Task] = []
platform_mgr: im_mgr.PlatformManager = None
cmd_mgr: cmdmgr.CommandManager = None
@@ -78,6 +85,12 @@ class Application:
logger: logging.Logger = None
persistence_mgr: persistencemgr.PersistenceManager = None
http_ctrl: http_controller.HTTPController = None
log_cache: logcache.LogCache = None
def __init__(self):
pass
@@ -91,13 +104,21 @@ class Application:
try:
# 后续可能会允许动态重启其他任务
# 故为了防止程序在非 Ctrl-C 情况下退出,这里创建一个不会结束的协程
async def never_ending():
while True:
await asyncio.sleep(1)
tasks = [
asyncio.create_task(self.platform_mgr.run()),
asyncio.create_task(self.ctrl.run())
asyncio.create_task(self.platform_mgr.run()), # 消息平台
asyncio.create_task(self.ctrl.run()), # 消息处理循环
asyncio.create_task(self.http_ctrl.run()), # http 接口服务
asyncio.create_task(never_ending())
]
self.asyncio_tasks.extend(tasks)
# 挂信号处理
# 挂系统信号处理
import signal
def signal_handler(sig, frame):
@@ -109,7 +130,6 @@ class Application:
signal.signal(signal.SIGINT, signal_handler)
await asyncio.gather(*tasks, return_exceptions=True)
except asyncio.CancelledError:
pass
except Exception as e: