feat: Новый формат сообщений
This commit is contained in:
@@ -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,7 +19,36 @@ 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')
|
||||
@@ -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}')
|
||||
|
||||
Reference in New Issue
Block a user