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
## About
**_[Status: Alpha]_** \
**_[In deep developing...]_** \
BeamingDrive Multiplayer (BeamMP) server compatible with BeamMP clients.
## TODOs

View File

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

View File

@ -1,11 +1,13 @@
# Developed by KuiToi Dev
# File core.core.py
# Written by: SantaSpeen
# Version 0.2.0
# Version 0.1.6
# Licence: FPA
# (c) kuitoi.su 2023
import asyncio
import os
import time
import traceback
import zlib
from threading import Thread
@ -224,8 +226,7 @@ class Core:
while self.run:
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",
"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,
"modstotal": modstotal, "playerslist": "", "desc": config.Server['description'], "pass": False}
self.log.debug(f"Auth: data {data}")
@ -282,10 +283,11 @@ class Core:
await asyncio.sleep(5)
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:
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
if config.WebAPI["enabled"]:
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")
await self.authenticate(True)
tasks = []
# 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()))
tasks = [self.tcp.start(), self.udp.start(), console.start(),
self.stop_me(), self.authenticate(),] # self.check_alive()
t = asyncio.wait(tasks, return_when=asyncio.FIRST_EXCEPTION)
self.log.info(i18n.start)
@ -323,12 +322,10 @@ class Core:
# Wait the end.
except Exception as e:
self.log.error(f"Exception: {e}")
self.log.exception(e)
traceback.print_exc()
except KeyboardInterrupt:
pass
finally:
self.tcp.stop()
self.udp.stop()
self.run = False
def start(self):

View File

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

View File

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

View File

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

View File

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

View File

@ -1,11 +1,12 @@
# Developed by KuiToi Dev
# File core.utils.py
# Written by: SantaSpeen
# Version 1.0
# Version 0.1.6
# Licence: FPA
# (c) kuitoi.su 2023
import logging
import os
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'

View File

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