Add WebAPI

This commit is contained in:
2023-07-11 18:26:26 +03:00
parent 9b00552912
commit c428479110
18 changed files with 319 additions and 31 deletions
+9 -11
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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))