# -*- coding: utf-8 -*- # hub/ticket/services/hardware_gateway.py """Публичный контракт аппаратного шлюза Ticket.""" from __future__ import annotations from typing import Any, Mapping, Protocol from domain import TicketHardwareStatus class TicketHardwareObserver(Protocol): """Получатель событий от аппаратного или mock-шлюза.""" def on_task_action(self, raw_action: Mapping[str, Any]) -> None: """Принять внешнее действие по задаче.""" def on_gateway_status(self, status: TicketHardwareStatus) -> None: """Принять обновление статуса подключения и инициализации.""" def on_gateway_error(self, message: str) -> None: """Принять сообщение об ошибке шлюза.""" class TicketHardwareGateway(Protocol): """Минимальный публичный API сервиса ввода событий Ticket.""" def start(self) -> None: """Запустить внешний источник событий.""" def stop(self) -> None: """Остановить внешний источник событий.""" def get_status(self) -> TicketHardwareStatus: """Вернуть текущий статус шлюза.""" def set_observer(self, observer: TicketHardwareObserver | None) -> None: """Назначить получателя событий приложения.""" def set_button_state(self, button_id: int, state_code: int) -> None: """Синхронизировать каноническое состояние кнопки для аппаратного шлюза.""" def remove_button_state(self, button_id: int) -> None: """Удалить известное состояние кнопки из шлюза.""" def reset_button_states(self) -> None: """Сбросить все известные состояния кнопок при смене контекста."""