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 logging
import asyncio
from weakref import WeakValueDictionary
from fastapi import WebSocket, FastAPI, Depends, HTTPException, WebSocketDisconnect, WebSocketException
from fastapi.security import HTTPBasic, HTTPBasicCredentials
from uuid import uuid4
@@ -17,8 +19,37 @@ class Server:
self._logger.addHandler(logging.NullHandler())
self._server_connection: WebSocket | None = None
self._requests: WeakValueDictionary[str, asyncio.Future] = WeakValueDictionary()
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):
@app.get('/pyg2o/auth')
async def pyg2o_auth(credentials: HTTPBasicCredentials = Depends(self._security)):
@@ -94,9 +125,9 @@ class Server:
async def _process_server_message(self, message: dict):
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 _:
raise ValueError(f'Неподдерживаемый тип PyG2O Server сообщения: {message}')