feat: Новый формат сообщений

This commit is contained in:
AURUMVORXX
2025-08-26 18:27:10 +05:00
parent fe00e837e4
commit 6d1d0276b9

View File

@@ -1,5 +1,7 @@
import json import json
import logging import logging
import asyncio
from weakref import WeakValueDictionary
from fastapi import WebSocket, FastAPI, Depends, HTTPException, WebSocketDisconnect, WebSocketException from fastapi import WebSocket, FastAPI, Depends, HTTPException, WebSocketDisconnect, WebSocketException
from fastapi.security import HTTPBasic, HTTPBasicCredentials from fastapi.security import HTTPBasic, HTTPBasicCredentials
from uuid import uuid4 from uuid import uuid4
@@ -17,7 +19,36 @@ class Server:
self._logger.addHandler(logging.NullHandler()) self._logger.addHandler(logging.NullHandler())
self._server_connection: WebSocket | None = None self._server_connection: WebSocket | None = None
self._requests: WeakValueDictionary[str, asyncio.Future] = WeakValueDictionary()
self._register_routes(app) self._register_routes(app)
async def server_call(self, message: str):
return await self._call(self._server_connection, message)
async def _call(self, socket: WebSocket | None, message: str):
if socket is None:
raise ConnectionError('PyG2O сервер не подключен')
request, data = self._make_request()
data['data'] = message
data = json.dumps(data)
# Меняем синтаксис под Squirrel
data = data.replace("'", '\\"').replace('True', 'true').replace('False', 'false')
await socket.send_text(message)
return request
def _make_request(self):
request_id = str(uuid4())
request = asyncio.Future()
self._requests[request_id] = request
data = {
'uuid': request_id,
'data': None,
}
return request, data
def _register_routes(self, app): def _register_routes(self, app):
@app.get('/pyg2o/auth') @app.get('/pyg2o/auth')
@@ -94,9 +125,9 @@ class Server:
async def _process_server_message(self, message: dict): async def _process_server_message(self, message: dict):
match message: match message:
case {'type': 'message', 'uuid': id, 'data': data}: case {'uuid': id, 'data': data}:
... ...
case {'type': 'event', 'uuid': id, 'data': data}: case {'data': data}:
... ...
case _: case _:
raise ValueError(f'Неподдерживаемый тип PyG2O Server сообщения: {message}') raise ValueError(f'Неподдерживаемый тип PyG2O Server сообщения: {message}')