49 lines
2.0 KiB
Python
49 lines
2.0 KiB
Python
# -*- 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:
|
||
"""Сбросить все известные состояния кнопок при смене контекста."""
|