Compare commits

..

No commits in common. "3f688df30ba950b877097c30733b0914f8c88e23" and "30b6a71a1ca3c2096b7b8ab3339d892d9edb7164" have entirely different histories.

9 changed files with 44 additions and 45 deletions

View File

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

View File

@ -1,8 +1,7 @@
# Developed by KuiToi Dev # Developed by KuiToi Dev
# File core.__init__.py # File core.__init__.py
# Written by: SantaSpeen # Written by: SantaSpeen
# Version 1.3 # Version 1.2
# 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)
@ -10,8 +9,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.2.0' __version__ = '0.1.6'
__build__ = 776 __build__ = 458
__author__ = 'SantaSpeen' __author__ = 'SantaSpeen'
__author_email__ = 'admin@kuitoi.su' __author_email__ = 'admin@kuitoi.su'
__license__ = "FPA" __license__ = "FPA"

View File

@ -1,11 +1,13 @@
# Developed by KuiToi Dev # Developed by KuiToi Dev
# File core.core.py # File core.core.py
# Written by: SantaSpeen # Written by: SantaSpeen
# Version 0.2.0 # Version 0.1.6
# 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
@ -224,8 +226,7 @@ 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, "private": config.Auth['private'], "version": self.BEAMP_version, "clientversion": self.client_major_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}")
@ -282,10 +283,11 @@ 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...")
@ -310,11 +312,8 @@ 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 = [] tasks = [self.tcp.start(), self.udp.start(), console.start(),
# self.check_alive() self.stop_me(), self.authenticate(),] # 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)
@ -323,12 +322,10 @@ 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}")
self.log.exception(e) traceback.print_exc()
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.2.0 # Version 0.1.6
# 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.2.0 # Version 0.1.6
# 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"S") # Accepted client version await client.tcp_send(b"A") # 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 (How?) # await client.tcp_send(b"S") # Ask client key
ev.call_event("on_auth", client) ev.call_event("on_auth", client)
@ -113,17 +113,18 @@ 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:
server = await asyncio.start_server(self.handle_client, self.host, self.port, self.log.debug(f"TCP server started on {server.sockets[0].getsockname()!r}")
backlog=config.Game["players"] + 1) while True:
except OSError as e: async with server:
await server.serve_forever()
except Exception as e:
self.log.error(f"Error: {e}") self.log.error(f"Error: {e}")
self.Core.run = False traceback.print_exc()
raise e finally:
self.log.debug(f"TCP server started on {server.sockets[0].getsockname()!r}") await self.stop()
while True:
async with server:
await server.serve_forever()
def stop(self): async def stop(self):
self.log.debug("Stopping TCP server") self.log.debug("Stopping TCP server")

View File

@ -1,11 +1,12 @@
# 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.2.0 # Version 0.1.6
# 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,9 +37,8 @@ class UDPServer:
self.log.error("Error while connecting..") self.log.error("Error while connecting..")
async def start(self): async def start(self):
pass self.log.debug("Starting UDP server.")
# self.log.debug("Starting UDP server.") await self.stop()
# 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()}")
@ -51,6 +50,5 @@ class UDPServer:
# finally: # finally:
# await self.stop() # await self.stop()
def stop(self): async def stop(self):
pass self.log.debug("Stopping UDP server")
# self.log.debug("Stopping UDP server")

View File

@ -1,11 +1,12 @@
# Developed by KuiToi Dev # Developed by KuiToi Dev
# File core.utils.py # File core.utils.py
# Written by: SantaSpeen # Written by: SantaSpeen
# Version 1.0 # Version 0.1.6
# 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,12 +18,14 @@ run = True
def main(): def main():
global run
from core import Core from core import Core
core = Core() core = Core()
try: while run:
core.start() try:
except KeyboardInterrupt: core.start()
core.run = False except KeyboardInterrupt:
run = False
core.stop() core.stop()