mirror of
https://github.com/kuitoi/kuitoi-Server.git
synced 2026-06-18 22:51:03 +00:00
Add WebAPI
This commit is contained in:
+9
-11
@@ -16,13 +16,6 @@ __author_email__ = 'admin@kuitoi.su'
|
||||
__license__ = "FPA"
|
||||
__copyright__ = 'Copyright 2023 © SantaSpeen (Maxim Khomutov)'
|
||||
|
||||
from main import parser
|
||||
|
||||
args = parser.parse_args()
|
||||
if args.version:
|
||||
print(f"{__title__}:\n\tVersion: {__version__}\n\tBuild: {__build__}")
|
||||
exit(0)
|
||||
|
||||
import asyncio
|
||||
import builtins
|
||||
import os
|
||||
@@ -31,14 +24,20 @@ import webbrowser
|
||||
import prompt_toolkit.shortcuts as shortcuts
|
||||
|
||||
from .utils import get_logger
|
||||
from core.core import Core
|
||||
from main import parser
|
||||
from modules import ConfigProvider, EventsSystem, PluginsLoader
|
||||
from modules import Console
|
||||
from modules import MultiLanguage
|
||||
from core.core import Core
|
||||
|
||||
args = parser.parse_args()
|
||||
if args.version:
|
||||
print(f"{__title__}:\n\tVersion: {__version__}\n\tBuild: {__build__}")
|
||||
exit(0)
|
||||
|
||||
loop = asyncio.new_event_loop()
|
||||
asyncio.set_event_loop(loop)
|
||||
log = get_logger("init")
|
||||
log = get_logger("core.init")
|
||||
|
||||
# Config file init
|
||||
config_path = "kuitoi.yml"
|
||||
@@ -49,7 +48,7 @@ config = config_provider.open_config()
|
||||
if config.Server['debug'] is True:
|
||||
utils.set_debug_status()
|
||||
log.info("Debug enabled!")
|
||||
log = get_logger("init")
|
||||
log = get_logger("core.init")
|
||||
log.debug("Debug mode enabled!")
|
||||
log.debug(f"Server config: {config}")
|
||||
|
||||
@@ -111,7 +110,6 @@ console.add_command("exit", console.stop, i18n.man_message_exit, i18n.help_messa
|
||||
if not os.path.exists("mods"):
|
||||
os.mkdir("mods")
|
||||
|
||||
|
||||
log.debug("Initializing PluginsLoader...")
|
||||
if not os.path.exists("plugins"):
|
||||
os.mkdir("plugins")
|
||||
|
||||
+38
-3
@@ -5,11 +5,16 @@
|
||||
# Licence: FPA
|
||||
# (c) kuitoi.su 2023
|
||||
import asyncio
|
||||
import time
|
||||
import zlib
|
||||
from threading import Thread
|
||||
|
||||
import uvicorn
|
||||
|
||||
from core import utils
|
||||
from .tcp_server import TCPServer
|
||||
from .udp_server import UDPServer
|
||||
from modules.WebAPISystem import app as webapp
|
||||
from core.tcp_server import TCPServer
|
||||
from core.udp_server import UDPServer
|
||||
|
||||
|
||||
class Client:
|
||||
@@ -145,6 +150,9 @@ class Core:
|
||||
self.server_port = config.Server["server_port"]
|
||||
self.tcp = TCPServer
|
||||
self.udp = UDPServer
|
||||
self.web_thread = None
|
||||
self.web_pool = webapp.data_pool
|
||||
self.web_stop = None
|
||||
|
||||
def get_client(self, sock=None, cid=None):
|
||||
if cid:
|
||||
@@ -172,15 +180,41 @@ class Core:
|
||||
if d:
|
||||
self.log.debug(f"Client ID: {cl.id} died...")
|
||||
|
||||
@staticmethod
|
||||
def start_web():
|
||||
global uvserver
|
||||
uvconfig = uvicorn.Config("modules.WebAPISystem.app:web_app",
|
||||
host=config.WebAPI["server_ip"],
|
||||
port=config.WebAPI["server_port"],
|
||||
loop="asyncio")
|
||||
uvserver = uvicorn.Server(uvconfig)
|
||||
webapp.uvserver = uvserver
|
||||
uvserver.run()
|
||||
|
||||
@staticmethod
|
||||
async def stop_me():
|
||||
while webapp.data_run[0]:
|
||||
await asyncio.sleep(1)
|
||||
raise KeyboardInterrupt
|
||||
|
||||
async def main(self):
|
||||
self.tcp = self.tcp(self, self.server_ip, self.server_port)
|
||||
self.udp = self.udp(self, self.server_ip, self.server_port)
|
||||
tasks = [self.tcp.start(), self.udp.start(), console.start()] # self.check_alive()
|
||||
tasks = [self.tcp.start(), self.udp.start(), console.start(), self.stop_me()] # self.check_alive()
|
||||
t = asyncio.wait(tasks, return_when=asyncio.FIRST_EXCEPTION)
|
||||
if config.WebAPI["enabled"]:
|
||||
self.log.debug("Initializing WebAPI...")
|
||||
web_thread = Thread(target=self.start_web)
|
||||
web_thread.start()
|
||||
self.web_thread = web_thread
|
||||
self.web_stop = webapp._stop
|
||||
self.log.info(i18n.start)
|
||||
# watch = Thread(target=self.stop_me)
|
||||
# watch.start()
|
||||
# TODO: Server auth
|
||||
ev.call_event("on_started")
|
||||
await t
|
||||
# watch.join()
|
||||
# while True:
|
||||
# try:
|
||||
# tasks = [console.start(), self.tcp.start(), self.udp.start()] # self.check_alive()
|
||||
@@ -198,4 +232,5 @@ class Core:
|
||||
|
||||
def stop(self):
|
||||
self.log.info(i18n.stop)
|
||||
asyncio.run(self.web_stop())
|
||||
exit(0)
|
||||
|
||||
+8
-1
@@ -6,6 +6,8 @@
|
||||
# (c) kuitoi.su 2023
|
||||
import asyncio
|
||||
from asyncio import StreamWriter, StreamReader
|
||||
from threading import Thread
|
||||
from typing import Callable
|
||||
|
||||
from core import utils
|
||||
from .tcp_server import TCPServer
|
||||
@@ -46,10 +48,15 @@ class Core:
|
||||
self.loop = asyncio.get_event_loop()
|
||||
self.tcp = TCPServer
|
||||
self.udp = UDPServer
|
||||
self.web_thread: Thread = None
|
||||
self.web_stop: Callable = lambda: None
|
||||
def insert_client(self, client: Client) -> None: ...
|
||||
def create_client(self, *args, **kwargs) -> Client: ...
|
||||
async def check_alive(self) -> None: ...
|
||||
@staticmethod
|
||||
def start_web() -> None: ...
|
||||
@staticmethod
|
||||
def stop_me(self) -> None: ...
|
||||
async def main(self) -> None: ...
|
||||
def start(self) -> None: ...
|
||||
def stop(self) -> None: ...
|
||||
|
||||
|
||||
+5
-4
@@ -8,15 +8,16 @@
|
||||
import logging
|
||||
import os
|
||||
|
||||
log_format = "[%(asctime)s | %(name)s | %(levelname)-5s] %(message)s"
|
||||
log_format = "[%(asctime)s | %(name)-14s | %(levelname)-5s] %(message)s"
|
||||
log_format_access = '[%(asctime)s | %(name)-14s | %(levelname)-5s] %(client_addr)s - "%(request_line)s" %(status_code)s'
|
||||
log_file = "server.log"
|
||||
log_level = logging.INFO
|
||||
# Инициализируем логирование
|
||||
logging.basicConfig(level=log_level, format=log_format)
|
||||
# Настройка логирование в файл.
|
||||
if os.path.exists(log_file):
|
||||
os.remove(log_file)
|
||||
fh = logging.FileHandler(log_file)
|
||||
# if os.path.exists(log_file):
|
||||
# os.remove(log_file)
|
||||
fh = logging.FileHandler(log_file, encoding='utf-8')
|
||||
fh.setFormatter(logging.Formatter(log_format))
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user