mirror of
https://github.com/kuitoi/kuitoi-Server.git
synced 2026-06-22 00:21:10 +00:00
Compare commits
9 Commits
0.4.5-beta
...
59c113ade5
| Author | SHA1 | Date | |
|---|---|---|---|
| 59c113ade5 | |||
| a06c48dca5 | |||
| 42e4a8e05e | |||
| 074589da47 | |||
| 50c12f4b5c | |||
| f145048cc1 | |||
| 68bf7d0d00 | |||
| e9815cdfcf | |||
| acb2b45626 |
+11
-1
@@ -32,6 +32,7 @@ class Client:
|
|||||||
self.nick = None
|
self.nick = None
|
||||||
self.roles = None
|
self.roles = None
|
||||||
self._guest = True
|
self._guest = True
|
||||||
|
self._synced = False
|
||||||
self._ready = False
|
self._ready = False
|
||||||
self._identifiers = []
|
self._identifiers = []
|
||||||
self._cars = [None] * 21 # Max 20 cars per player + 1 snowman
|
self._cars = [None] * 21 # Max 20 cars per player + 1 snowman
|
||||||
@@ -72,6 +73,10 @@ class Client:
|
|||||||
def guest(self):
|
def guest(self):
|
||||||
return self._guest
|
return self._guest
|
||||||
|
|
||||||
|
@property
|
||||||
|
def synced(self):
|
||||||
|
return self._synced
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def ready(self):
|
def ready(self):
|
||||||
return self._ready
|
return self._ready
|
||||||
@@ -617,6 +622,8 @@ class Client:
|
|||||||
ev_data_list.extend(d2)
|
ev_data_list.extend(d2)
|
||||||
need_send = True
|
need_send = True
|
||||||
for ev_data in ev_data_list:
|
for ev_data in ev_data_list:
|
||||||
|
if ev_data is None:
|
||||||
|
continue
|
||||||
try:
|
try:
|
||||||
message = ev_data["message"]
|
message = ev_data["message"]
|
||||||
to_all = ev_data.get("to_all")
|
to_all = ev_data.get("to_all")
|
||||||
@@ -634,7 +641,9 @@ class Client:
|
|||||||
self.log.info(f"{message}" if to_all else f"{self.nick}: {msg}")
|
self.log.info(f"{message}" if to_all else f"{self.nick}: {msg}")
|
||||||
await self._send(f"C:{message}", to_all=to_all, to_self=to_self, writer=writer)
|
await self._send(f"C:{message}", to_all=to_all, to_self=to_self, writer=writer)
|
||||||
need_send = False
|
need_send = False
|
||||||
except KeyError | AttributeError:
|
except KeyError:
|
||||||
|
self.log.error(i18n.client_event_invalid_data.format(ev_data))
|
||||||
|
except AttributeError:
|
||||||
self.log.error(i18n.client_event_invalid_data.format(ev_data))
|
self.log.error(i18n.client_event_invalid_data.format(ev_data))
|
||||||
if need_send:
|
if need_send:
|
||||||
if config.Options['log_chat']:
|
if config.Options['log_chat']:
|
||||||
@@ -702,6 +711,7 @@ class Client:
|
|||||||
tasks = self.__tasks
|
tasks = self.__tasks
|
||||||
recv = asyncio.create_task(self._recv())
|
recv = asyncio.create_task(self._recv())
|
||||||
tasks.append(recv)
|
tasks.append(recv)
|
||||||
|
self._synced = True
|
||||||
while self.__alive:
|
while self.__alive:
|
||||||
if len(self.__packets_queue) > 0:
|
if len(self.__packets_queue) > 0:
|
||||||
for index, packet in enumerate(self.__packets_queue):
|
for index, packet in enumerate(self.__packets_queue):
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ class Client:
|
|||||||
self.roles: str = None
|
self.roles: str = None
|
||||||
self._guest = True
|
self._guest = True
|
||||||
self.__alive = True
|
self.__alive = True
|
||||||
|
self._synced = False
|
||||||
self._ready = False
|
self._ready = False
|
||||||
self._focus_car = -1
|
self._focus_car = -1
|
||||||
self._identifiers = []
|
self._identifiers = []
|
||||||
@@ -55,6 +56,8 @@ class Client:
|
|||||||
@property
|
@property
|
||||||
def guest(self) -> bool: ...
|
def guest(self) -> bool: ...
|
||||||
@property
|
@property
|
||||||
|
def synced(self) -> bool: ...
|
||||||
|
@property
|
||||||
def ready(self) -> bool: ...
|
def ready(self) -> bool: ...
|
||||||
@property
|
@property
|
||||||
def identifiers(self) -> list: ...
|
def identifiers(self) -> list: ...
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ __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.4.5'
|
__version__ = '0.4.5'
|
||||||
__build__ = 2300 # Я это считаю лог файлами
|
__build__ = 2303 # Я это считаю лог файлами
|
||||||
__author__ = 'SantaSpeen'
|
__author__ = 'SantaSpeen'
|
||||||
__author_email__ = 'admin@kuitoi.su'
|
__author_email__ = 'admin@kuitoi.su'
|
||||||
__license__ = "FPA"
|
__license__ = "FPA"
|
||||||
|
|||||||
+1
-1
@@ -57,7 +57,7 @@ class Core:
|
|||||||
return None
|
return None
|
||||||
if cid is not None:
|
if cid is not None:
|
||||||
if cid == -1:
|
if cid == -1:
|
||||||
return [i for i in self.clients if i is not None]
|
return [i for i in self.clients if i is not None and i.synced]
|
||||||
return self.clients_by_id.get(cid)
|
return self.clients_by_id.get(cid)
|
||||||
if nick:
|
if nick:
|
||||||
return self.clients_by_nick.get(nick)
|
return self.clients_by_nick.get(nick)
|
||||||
|
|||||||
@@ -53,6 +53,8 @@ class TCPServer:
|
|||||||
client.roles = res["roles"]
|
client.roles = res["roles"]
|
||||||
client._guest = res["guest"]
|
client._guest = res["guest"]
|
||||||
client._identifiers = {k: v for s in res["identifiers"] for k, v in [s.split(':')]}
|
client._identifiers = {k: v for s in res["identifiers"] for k, v in [s.split(':')]}
|
||||||
|
if not client._identifiers.get("ip"):
|
||||||
|
client._identifiers["ip"] = client._addr[0]
|
||||||
# noinspection PyProtectedMember
|
# noinspection PyProtectedMember
|
||||||
client._update_logger()
|
client._update_logger()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
@@ -25,7 +25,8 @@ class Config:
|
|||||||
"access_token": secrets.token_hex(16)}
|
"access_token": secrets.token_hex(16)}
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "%s(Auth=%r, Game=%r, Server=%r)" % (self.__class__.__name__, self.Auth, self.Game, self.Server)
|
return f"{self.__class__.__name__}(Auth={self.Auth!r}, Game={self.Game!r}, Server={self.Server!r}, " \
|
||||||
|
f"RCON={self.RCON!r}, Options={self.Options!r}, WebAPI={self.WebAPI!r})"
|
||||||
|
|
||||||
|
|
||||||
class ConfigProvider:
|
class ConfigProvider:
|
||||||
|
|||||||
@@ -15,7 +15,10 @@ from prompt_toolkit import PromptSession, print_formatted_text, HTML
|
|||||||
from prompt_toolkit.auto_suggest import AutoSuggestFromHistory
|
from prompt_toolkit.auto_suggest import AutoSuggestFromHistory
|
||||||
from prompt_toolkit.completion import NestedCompleter
|
from prompt_toolkit.completion import NestedCompleter
|
||||||
from prompt_toolkit.history import FileHistory
|
from prompt_toolkit.history import FileHistory
|
||||||
from prompt_toolkit.output.win32 import NoConsoleScreenBufferError
|
try:
|
||||||
|
from prompt_toolkit.output.win32 import NoConsoleScreenBufferError
|
||||||
|
except AssertionError:
|
||||||
|
class NoConsoleScreenBufferError(Exception): ...
|
||||||
from prompt_toolkit.patch_stdout import patch_stdout
|
from prompt_toolkit.patch_stdout import patch_stdout
|
||||||
|
|
||||||
from core import get_logger
|
from core import get_logger
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ class EventsSystem:
|
|||||||
return funcs_data
|
return funcs_data
|
||||||
|
|
||||||
def call_lua_event(self, event_name, *args):
|
def call_lua_event(self, event_name, *args):
|
||||||
self.log.debug(f"Calling lua event: '{event_name}'")
|
self.log.debug(f"Calling lua event: '{event_name} ({args})'")
|
||||||
funcs_data = []
|
funcs_data = []
|
||||||
if event_name in self.__lua_events.keys():
|
if event_name in self.__lua_events.keys():
|
||||||
for data in self.__lua_events[event_name]:
|
for data in self.__lua_events[event_name]:
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ class MP:
|
|||||||
|
|
||||||
def TriggerLocalEvent(self, event_name, *args):
|
def TriggerLocalEvent(self, event_name, *args):
|
||||||
self.log.debug("request TriggerLocalEvent()")
|
self.log.debug("request TriggerLocalEvent()")
|
||||||
self.log.debug(f"Calling local lua event: '{event_name}'")
|
self.log.debug(f"Calling local lua event: '{event_name}{args}'")
|
||||||
funcs_data = []
|
funcs_data = []
|
||||||
if event_name in self._local_events.keys():
|
if event_name in self._local_events.keys():
|
||||||
for func_name in self._local_events[event_name]:
|
for func_name in self._local_events[event_name]:
|
||||||
@@ -157,7 +157,7 @@ class MP:
|
|||||||
to_all = False
|
to_all = False
|
||||||
if player_id < 0:
|
if player_id < 0:
|
||||||
to_all = True
|
to_all = True
|
||||||
client = client[0]
|
client = client[0] if len(client) > 0 else None
|
||||||
if client and event_name and data:
|
if client and event_name and data:
|
||||||
t = self.loop.create_task(client.send_event(event_name, data, to_all=to_all))
|
t = self.loop.create_task(client.send_event(event_name, data, to_all=to_all))
|
||||||
self.tasks.append(t)
|
self.tasks.append(t)
|
||||||
@@ -168,7 +168,7 @@ class MP:
|
|||||||
return False, "Can't found event_name or data"
|
return False, "Can't found event_name or data"
|
||||||
|
|
||||||
def TriggerClientEventJson(self, player_id, event_name, data):
|
def TriggerClientEventJson(self, player_id, event_name, data):
|
||||||
self.log.debug("request TriggerClientEventJson()")
|
self.log.debug(f"request TriggerClientEventJson({player_id, event_name, data})")
|
||||||
data = self._lua.globals().Util.JsonEncode(data)
|
data = self._lua.globals().Util.JsonEncode(data)
|
||||||
self.TriggerClientEvent(player_id, event_name, data)
|
self.TriggerClientEvent(player_id, event_name, data)
|
||||||
|
|
||||||
@@ -232,8 +232,8 @@ class MP:
|
|||||||
|
|
||||||
def GetPlayers(self):
|
def GetPlayers(self):
|
||||||
self.log.debug("request GetPlayers()")
|
self.log.debug("request GetPlayers()")
|
||||||
clients = ev.call_event("_get_players", cid=-1)
|
clients = ev.call_event("_get_player", cid=-1)[0]
|
||||||
return self._lua.table_from(clients)
|
return self._lua.table_from([i.nick for i in clients])
|
||||||
|
|
||||||
def IsPlayerGuest(self, player_id) -> bool:
|
def IsPlayerGuest(self, player_id) -> bool:
|
||||||
self.log.debug("request IsPlayerGuest()")
|
self.log.debug("request IsPlayerGuest()")
|
||||||
@@ -312,12 +312,18 @@ class Util:
|
|||||||
return {k: v for k, v in new_dict.items() if v is not None}
|
return {k: v for k, v in new_dict.items() if v is not None}
|
||||||
|
|
||||||
def JsonEncode(self, table):
|
def JsonEncode(self, table):
|
||||||
self.log.debug("requesting JsonEncode()")
|
data = {}
|
||||||
if all(isinstance(k, int) for k in table.keys()):
|
try:
|
||||||
data = self._recursive_list_encode(table)
|
self.log.debug("requesting JsonEncode()")
|
||||||
else:
|
if all(isinstance(k, int) for k in table.keys()):
|
||||||
data = self._recursive_dict_encode(table)
|
data = self._recursive_list_encode(table)
|
||||||
return json.dumps(data)
|
else:
|
||||||
|
data = self._recursive_dict_encode(table)
|
||||||
|
except Exception as e:
|
||||||
|
self.log.exception(e)
|
||||||
|
data = json.dumps(data)
|
||||||
|
self.log.debug(f"Encoded: {data}")
|
||||||
|
return data
|
||||||
|
|
||||||
def JsonDecode(self, string):
|
def JsonDecode(self, string):
|
||||||
self.log.debug("requesting JsonDecode()")
|
self.log.debug("requesting JsonDecode()")
|
||||||
|
|||||||
Reference in New Issue
Block a user