from abc import ABC, abstractmethod from typing import AsyncIterator from models.results import FrameResult from models.recovery import UserInputRequest class SSEEventStreamerBase(ABC): @abstractmethod async def emit_frame_result( self, flight_id: str, result: FrameResult ) -> None: pass @abstractmethod async def emit_status_update( self, flight_id: str, status: dict ) -> None: pass @abstractmethod async def emit_user_input_request( self, flight_id: str, request: UserInputRequest ) -> None: pass @abstractmethod async def emit_error( self, flight_id: str, error: str ) -> None: pass @abstractmethod def subscribe(self, flight_id: str) -> AsyncIterator[dict]: pass @abstractmethod async def unsubscribe(self, flight_id: str, subscriber_id: str) -> None: pass @abstractmethod async def get_subscriber_count(self, flight_id: str) -> int: pass