Compare commits

..

7 Commits

Author SHA1 Message Date
3f688df30b Change version to 0.2.0 2023-07-12 20:28:41 +03:00
52c9370c6d Optimize imports 2023-07-12 20:28:22 +03:00
b654d62b30 Remove try block 2023-07-12 20:25:10 +03:00
aab20c17a1 Refactoring 2023-07-12 20:24:56 +03:00
9518fcad11 Minor update 2023-07-12 20:24:38 +03:00
bab45674e8 Changed to Alpha 2023-07-12 20:24:08 +03:00
50de09633e Disable UDP Server for now.. 2023-07-12 20:21:57 +03:00
9 changed files with 45 additions and 44 deletions

View File

@ -1,7 +1,7 @@
# KuiToi-Server # KuiToi-Server
## About ## About
**_[In deep developing...]_** \ **_[Status: Alpha]_** \
BeamingDrive Multiplayer (BeamMP) server compatible with BeamMP clients. BeamingDrive Multiplayer (BeamMP) server compatible with BeamMP clients.
## TODOs ## TODOs

View File

@ -1,7 +1,8 @@
# Developed by KuiToi Dev # Developed by KuiToi Dev
# File core.__init__.py # File core.__init__.py
# Written by: SantaSpeen # Written by: SantaSpeen
# Version 1.2 # Version 1.3
# Core version: 0.2.0
# Licence: FPA # Licence: FPA
# (c) kuitoi.su 2023 # (c) kuitoi.su 2023
# Special thanks to: AI Sage(https://poe.com/Sage), AI falcon-40b-v7(https://OpenBuddy.ai) # Special thanks to: AI Sage(https://poe.com/Sage), AI falcon-40b-v7(https://OpenBuddy.ai)
@ -9,8 +10,8 @@
__title__ = 'KuiToi-Server' __title__ = 'KuiToi-Server'
__description__ = 'BeamingDrive Multiplayer server compatible with BeamMP clients.' __description__ = 'BeamingDrive Multiplayer server compatible with BeamMP clients.'
__url__ = 'https://github.com/kuitoi/kuitoi-Server' __url__ = 'https://github.com/kuitoi/kuitoi-Server'
__version__ = '0.1.6' __version__ = '0.2.0'
__build__ = 458 __build__ = 776
__author__ = 'SantaSpeen' __author__ = 'SantaSpeen'
__author_email__ = 'admin@kuitoi.su' __author_email__ = 'admin@kuitoi.su'
__license__ = "FPA" __license__ = "FPA"

View File

@ -1,13 +1,11 @@
# Developed by KuiToi Dev # Developed by KuiToi Dev
# File core.core.py # File core.core.py
# Written by: SantaSpeen # Written by: SantaSpeen
# Version 0.1.6 # Version 0.2.0
# Licence: FPA # Licence: FPA
# (c) kuitoi.su 2023 # (c) kuitoi.su 2023
import asyncio import asyncio
import os import os
import time
import traceback
import zlib import zlib
from threading import Thread from threading import Thread
@ -226,7 +224,8 @@ class Core:
while self.run: while self.run:
data = {"uuid": config.Auth["key"], "players": len(self.clients), "maxplayers": config.Game["players"], data = {"uuid": config.Auth["key"], "players": len(self.clients), "maxplayers": config.Game["players"],
"port": config.Server["server_port"], "map": f"/levels/{config.Game['map']}/info.json", "port": config.Server["server_port"], "map": f"/levels/{config.Game['map']}/info.json",
"private": config.Auth['private'], "version": self.BEAMP_version, "clientversion": self.client_major_version, "private": config.Auth['private'], "version": self.BEAMP_version,
"clientversion": self.client_major_version,
"name": config.Server["name"], "modlist": modlist, "modstotalsize": modstotalsize, "name": config.Server["name"], "modlist": modlist, "modstotalsize": modstotalsize,
"modstotal": modstotal, "playerslist": "", "desc": config.Server['description'], "pass": False} "modstotal": modstotal, "playerslist": "", "desc": config.Server['description'], "pass": False}
self.log.debug(f"Auth: data {data}") self.log.debug(f"Auth: data {data}")
@ -283,11 +282,10 @@ class Core:
await asyncio.sleep(5) await asyncio.sleep(5)
async def main(self): async def main(self):
self.run = True
self.tcp = self.tcp(self, self.server_ip, self.server_port)
self.udp = self.udp(self, self.server_ip, self.server_port)
try: try:
self.run = True
self.tcp = self.tcp(self, self.server_ip, self.server_port)
self.udp = self.udp(self, self.server_ip, self.server_port)
# WebApi Start # WebApi Start
if config.WebAPI["enabled"]: if config.WebAPI["enabled"]:
self.log.debug("Initializing WebAPI...") self.log.debug("Initializing WebAPI...")
@ -312,8 +310,11 @@ class Core:
self.log.info(f"Loaded {lmods} mods: {round(self.mods_list[0] / MB, 2)}mb") self.log.info(f"Loaded {lmods} mods: {round(self.mods_list[0] / MB, 2)}mb")
await self.authenticate(True) await self.authenticate(True)
tasks = [self.tcp.start(), self.udp.start(), console.start(), tasks = []
self.stop_me(), self.authenticate(),] # self.check_alive() # self.check_alive()
nrtasks = [self.tcp.start, self.udp.start, console.start, self.stop_me, self.authenticate, ]
for task in nrtasks:
tasks.append(asyncio.create_task(task()))
t = asyncio.wait(tasks, return_when=asyncio.FIRST_EXCEPTION) t = asyncio.wait(tasks, return_when=asyncio.FIRST_EXCEPTION)
self.log.info(i18n.start) self.log.info(i18n.start)
@ -322,10 +323,12 @@ class Core:
# Wait the end. # Wait the end.
except Exception as e: except Exception as e:
self.log.error(f"Exception: {e}") self.log.error(f"Exception: {e}")
traceback.print_exc() self.log.exception(e)
except KeyboardInterrupt: except KeyboardInterrupt:
pass pass
finally: finally:
self.tcp.stop()
self.udp.stop()
self.run = False self.run = False
def start(self): def start(self):

View File

@ -1,7 +1,7 @@
# Developed by KuiToi Dev # Developed by KuiToi Dev
# File core.core.pyi # File core.core.pyi
# Written by: SantaSpeen # Written by: SantaSpeen
# Version 0.1.6 # Version 0.2.0
# Licence: FPA # Licence: FPA
# (c) kuitoi.su 2023 # (c) kuitoi.su 2023
import asyncio import asyncio

View File

@ -1,7 +1,7 @@
# Developed by KuiToi Dev # Developed by KuiToi Dev
# File core.tcp_server.py # File core.tcp_server.py
# Written by: SantaSpeen # Written by: SantaSpeen
# Version 0.1.6 # Version 0.2.0
# Licence: FPA # Licence: FPA
# (c) kuitoi.su 2023 # (c) kuitoi.su 2023
import asyncio import asyncio
@ -32,7 +32,7 @@ class TCPServer:
await client.kick("Outdated Version.") await client.kick("Outdated Version.")
return False, None return False, None
else: else:
await client.tcp_send(b"A") # Accepted client version await client.tcp_send(b"S") # Accepted client version
data = await client.recv() data = await client.recv()
self.log.debug(f"recv2 data: {data}") self.log.debug(f"recv2 data: {data}")
@ -58,7 +58,7 @@ class TCPServer:
await client.kick('Invalid authentication data! Try to connect in 5 minutes.') await client.kick('Invalid authentication data! Try to connect in 5 minutes.')
# TODO: Password party # TODO: Password party
# await client.tcp_send(b"S") # Ask client key # await client.tcp_send(b"S") # Ask client key (How?)
ev.call_event("on_auth", client) ev.call_event("on_auth", client)
@ -113,18 +113,17 @@ class TCPServer:
async def start(self): async def start(self):
self.log.debug("Starting TCP server.") self.log.debug("Starting TCP server.")
server = await asyncio.start_server(self.handle_client, self.host, self.port,
backlog=config.Game["players"] + 1)
try: try:
self.log.debug(f"TCP server started on {server.sockets[0].getsockname()!r}") server = await asyncio.start_server(self.handle_client, self.host, self.port,
while True: backlog=config.Game["players"] + 1)
async with server: except OSError as e:
await server.serve_forever()
except Exception as e:
self.log.error(f"Error: {e}") self.log.error(f"Error: {e}")
traceback.print_exc() self.Core.run = False
finally: raise e
await self.stop() self.log.debug(f"TCP server started on {server.sockets[0].getsockname()!r}")
while True:
async with server:
await server.serve_forever()
async def stop(self): def stop(self):
self.log.debug("Stopping TCP server") self.log.debug("Stopping TCP server")

View File

@ -1,12 +1,11 @@
# Developed by KuiToi Dev # Developed by KuiToi Dev
# File core.tcp_server.pyi # File core.tcp_server.pyi
# Written by: SantaSpeen # Written by: SantaSpeen
# Version 0.1.6 # Version 0.2.0
# Licence: FPA # Licence: FPA
# (c) kuitoi.su 2023 # (c) kuitoi.su 2023
import asyncio import asyncio
from asyncio import StreamWriter, StreamReader from asyncio import StreamWriter, StreamReader
import socket
from typing import Tuple from typing import Tuple
from core import utils, Core from core import utils, Core

View File

@ -37,8 +37,9 @@ class UDPServer:
self.log.error("Error while connecting..") self.log.error("Error while connecting..")
async def start(self): async def start(self):
self.log.debug("Starting UDP server.") pass
await self.stop() # self.log.debug("Starting UDP server.")
# await self.stop()
# srv_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # srv_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# srv_sock.bind((self.host, self.port)) # srv_sock.bind((self.host, self.port))
# self.log.debug(f"Serving on {srv_sock.getsockname()}") # self.log.debug(f"Serving on {srv_sock.getsockname()}")
@ -50,5 +51,6 @@ class UDPServer:
# finally: # finally:
# await self.stop() # await self.stop()
async def stop(self): def stop(self):
self.log.debug("Stopping UDP server") pass
# self.log.debug("Stopping UDP server")

View File

@ -1,12 +1,11 @@
# Developed by KuiToi Dev # Developed by KuiToi Dev
# File core.utils.py # File core.utils.py
# Written by: SantaSpeen # Written by: SantaSpeen
# Version 0.1.6 # Version 1.0
# Licence: FPA # Licence: FPA
# (c) kuitoi.su 2023 # (c) kuitoi.su 2023
import logging import logging
import os
log_format = "[%(asctime)s | %(name)-14s | %(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_format_access = '[%(asctime)s | %(name)-14s | %(levelname)-5s] %(client_addr)s - "%(request_line)s" %(status_code)s'

View File

@ -18,14 +18,12 @@ run = True
def main(): def main():
global run
from core import Core from core import Core
core = Core() core = Core()
while run: try:
try: core.start()
core.start() except KeyboardInterrupt:
except KeyboardInterrupt: core.run = False
run = False
core.stop() core.stop()