From a31b565967b18ae12621b4f92dd3ceac0a2bf82b Mon Sep 17 00:00:00 2001 From: AURUMVORXX Date: Wed, 29 Oct 2025 22:57:04 +0500 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=A3=D0=BF=D1=80=D0=BE=D1=89=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=B2=D0=B7=D0=B0=D0=B8=D0=BC=D0=BE=D0=B4=D0=B5?= =?UTF-8?q?=D0=B9=D1=81=D1=82=D0=B2=D0=B8=D0=B5=20=D0=BF=D0=BE=20=D0=B2?= =?UTF-8?q?=D0=B5=D0=B1=D1=81=D0=BE=D0=BA=D0=B5=D1=82=D0=B0=D0=BC=20=D0=BC?= =?UTF-8?q?=D0=B5=D0=B6=D0=B4=D1=83=20=D0=BA=D0=BB=D0=B8=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=BE=D0=BC=20=D0=B8=20=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/server/messages.nut | 2 +- src/pyg2o/event.py | 9 +++++++-- src/pyg2o/server.py | 18 ++++++++---------- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/include/server/messages.nut b/include/server/messages.nut index 91a020d..75ff4ad 100644 --- a/include/server/messages.nut +++ b/include/server/messages.nut @@ -3,5 +3,5 @@ function _message_call(data) { local compile_string = "try { " + data["data"] + " } catch(id) { print(\"[PyG2O] Error white executing the code: \" + id + \"\\nCode: " + data["data"] + "\"); return null; }"; local result = compilestring(compile_string)(); - _send({"uuid": data["uuid"], "data": result}); + _send({"event": "sq_response", "uuid": data["uuid"], "data": result}); } diff --git a/src/pyg2o/event.py b/src/pyg2o/event.py index 47619bb..d375f07 100644 --- a/src/pyg2o/event.py +++ b/src/pyg2o/event.py @@ -1,4 +1,6 @@ import inspect +import server +from fastapi import WebSocket _EVENTS = {} @@ -15,9 +17,12 @@ def event(event_name: str, priority: int = 9999): return func return inlineEvent -async def call_event(event_name: str, *args, **kwargs): +async def call_event(event_name: str, connection: WebSocket, uuid: str | None, *args, **kwargs): if event_name not in _EVENTS: return for item in _EVENTS[event_name]: - await item['function'](*args, **kwargs) + result = await item['function'](*args, **kwargs) + if uuid is None or result is None: + return + await server.Server.send(connection = connection, uuid = uuid, message = result) diff --git a/src/pyg2o/server.py b/src/pyg2o/server.py index a98c633..66b104c 100644 --- a/src/pyg2o/server.py +++ b/src/pyg2o/server.py @@ -33,7 +33,7 @@ class Server: cls._register_routes(app) @classmethod - async def publish(cls, topic: str, message: str) -> asyncio.Future: + async def publish(cls, topic: str, message) -> asyncio.Future: if topic not in cls._topics: raise KeyError('Клиентов прослушивающих этот топик не существует') @@ -49,7 +49,7 @@ class Server: return request @classmethod - async def send(cls, connection: WebSocket, message: str, uuid: str): + async def send(cls, connection: WebSocket, message, uuid: str): data = { 'uuid': uuid, 'data': message, @@ -133,14 +133,12 @@ class Server: async def _process_message(cls, connection: WebSocket, message: dict): match message: - case {'uuid': id, 'data': data}: - if id in cls._requests: - cls._requests[id].set_result(data) - else: - asyncio.create_task(call_event('onWebsocketMessage', connection, id, data)) - - case {'event': event, **args}: - asyncio.create_task(call_event(event, **args)) + case {'event': event, **kwargs}: + try: + cls._requests[kwargs['uuid']].set_result(kwargs) + except KeyError: + uuid = kwargs.get('uuid') + asyncio.create_task(call_event(event, connection, uuid, **kwargs)) case {'subscribe': topics}: await cls._subscribe(topics, connection)