build 059.9: add websocket runtime protocols
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
# app/src/market_data/acquisition/runtime/websocket_protocol.py
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Protocol, runtime_checkable
|
||||
|
||||
|
||||
@runtime_checkable
|
||||
class WebSocketTransportProtocol(Protocol):
|
||||
"""
|
||||
Низкоуровневый транспорт WebSocket.
|
||||
|
||||
Контракт отвечает только за открытие и закрытие соединения,
|
||||
отправку исходящих сообщений и получение входящих сообщений.
|
||||
|
||||
Реализация не должна выполнять:
|
||||
- parsing;
|
||||
- schema validation;
|
||||
- value validation;
|
||||
- mapping;
|
||||
- routing бизнес-событий.
|
||||
"""
|
||||
|
||||
async def connect(self) -> None:
|
||||
"""Открыть WebSocket-соединение."""
|
||||
...
|
||||
|
||||
async def disconnect(self) -> None:
|
||||
"""Закрыть WebSocket-соединение."""
|
||||
...
|
||||
|
||||
async def send(self, message: str | bytes) -> None:
|
||||
"""Отправить сериализованное транспортное сообщение."""
|
||||
...
|
||||
|
||||
async def receive(self) -> str | bytes:
|
||||
"""Получить одно сырое транспортное сообщение."""
|
||||
...
|
||||
|
||||
|
||||
@runtime_checkable
|
||||
class WebSocketSessionProtocol(Protocol):
|
||||
"""
|
||||
Контракт жизненного цикла WebSocket-сессии.
|
||||
|
||||
Session координирует транспорт и последующие runtime-компоненты,
|
||||
но не содержит exchange-specific parsing или mapping.
|
||||
"""
|
||||
|
||||
@property
|
||||
def is_connected(self) -> bool:
|
||||
"""Показывает, открыта ли активная WebSocket-сессия."""
|
||||
...
|
||||
|
||||
async def start(self) -> None:
|
||||
"""Запустить WebSocket-сессию."""
|
||||
...
|
||||
|
||||
async def stop(self) -> None:
|
||||
"""Остановить WebSocket-сессию."""
|
||||
...
|
||||
|
||||
|
||||
@runtime_checkable
|
||||
class WebSocketSubscriptionManagerProtocol(Protocol):
|
||||
"""
|
||||
Контракт управления активными WebSocket-подписками.
|
||||
|
||||
Конкретные модели подписок и формат сообщений будут добавлены
|
||||
в последующих Build'ах.
|
||||
"""
|
||||
|
||||
async def restore_subscriptions(self) -> None:
|
||||
"""Восстановить активные подписки после подключения."""
|
||||
...
|
||||
|
||||
async def clear_subscriptions(self) -> None:
|
||||
"""Очистить runtime-состояние активных подписок."""
|
||||
...
|
||||
Reference in New Issue
Block a user