mirror of
https://github.com/kuitoi/kuitoi-Server.git
synced 2025-08-17 16:25:36 +00:00
Compare commits
7 Commits
30b6a71a1c
...
3f688df30b
Author | SHA1 | Date | |
---|---|---|---|
3f688df30b | |||
52c9370c6d | |||
b654d62b30 | |||
aab20c17a1 | |||
9518fcad11 | |||
bab45674e8 | |||
50de09633e |
@ -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
|
||||||
|
@ -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"
|
||||||
|
@ -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):
|
||||||
|
@ -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
|
||||||
|
@ -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")
|
||||||
|
@ -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
|
||||||
|
@ -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")
|
||||||
|
@ -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'
|
||||||
|
10
src/main.py
10
src/main.py
@ -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()
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user