build 059.9: add websocket runtime protocols

This commit is contained in:
2026-07-17 19:15:15 +03:00
parent e5a4efa5d1
commit 8109ed6210
3 changed files with 442 additions and 0 deletions

View File

@@ -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-состояние активных подписок."""
...