Add Dispatch_V0.1.1
This commit is contained in:
93
Dispatch_V0.1.1/services/base_service.py
Normal file
93
Dispatch_V0.1.1/services/base_service.py
Normal file
@@ -0,0 +1,93 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# hub/ticket/services/base_service.py
|
||||
|
||||
"""Базовый транспортный сервис Ticket без доменной логики."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import replace
|
||||
|
||||
from PySide6.QtCore import QObject, Signal
|
||||
|
||||
from domain import TicketConnectionStatus, TicketHardwareStatus
|
||||
from domain.ticket_constants import STATE_TODO
|
||||
|
||||
|
||||
class BaseService(QObject):
|
||||
"""Общий контракт transport-сервисов Ticket."""
|
||||
|
||||
action_triggered = Signal(object)
|
||||
error_occurred = Signal(str)
|
||||
com_status_changed = Signal(bool, str)
|
||||
buttons_initialized = Signal(bool, int)
|
||||
port_disconnected = Signal()
|
||||
|
||||
def __init__(self, parent: QObject | None = None):
|
||||
super().__init__(parent)
|
||||
self._button_states: dict[int, int] = {}
|
||||
self._status = TicketHardwareStatus()
|
||||
|
||||
def start(self) -> None:
|
||||
raise NotImplementedError
|
||||
|
||||
def stop(self) -> None:
|
||||
raise NotImplementedError
|
||||
|
||||
def is_running(self) -> bool:
|
||||
raise NotImplementedError
|
||||
|
||||
def get_status(self) -> TicketHardwareStatus:
|
||||
"""Вернуть последний известный статус transport-сервиса."""
|
||||
return self._status
|
||||
|
||||
def set_button_state(self, button_id: int, state_code: int) -> None:
|
||||
"""Сохранить последнее известное состояние кнопки."""
|
||||
self._button_states[int(button_id)] = int(state_code)
|
||||
|
||||
def remove_button_state(self, button_id: int) -> None:
|
||||
"""Удалить состояние кнопки из локального transport-кэша."""
|
||||
self._button_states.pop(int(button_id), None)
|
||||
|
||||
def reset_button_states(self) -> None:
|
||||
"""Сбросить все известные состояния кнопок."""
|
||||
self._button_states.clear()
|
||||
|
||||
def _get_button_state(self, button_id: int) -> int:
|
||||
return self._button_states.get(int(button_id), STATE_TODO)
|
||||
|
||||
def _set_connection_status(
|
||||
self,
|
||||
connection_status: TicketConnectionStatus,
|
||||
message: str,
|
||||
) -> None:
|
||||
if (
|
||||
self._status.connection_status == connection_status
|
||||
and self._status.message == message
|
||||
):
|
||||
return
|
||||
self._status = replace(
|
||||
self._status,
|
||||
connection_status=connection_status,
|
||||
message=message,
|
||||
)
|
||||
self.com_status_changed.emit(
|
||||
connection_status == TicketConnectionStatus.CONNECTED,
|
||||
message,
|
||||
)
|
||||
|
||||
def _set_button_initialization(
|
||||
self,
|
||||
is_initialized: bool,
|
||||
button_count: int,
|
||||
) -> None:
|
||||
if (
|
||||
self._status.buttons_initialized == is_initialized
|
||||
and self._status.button_count == button_count
|
||||
):
|
||||
return
|
||||
self._status = replace(
|
||||
self._status,
|
||||
buttons_initialized=is_initialized,
|
||||
button_count=button_count,
|
||||
)
|
||||
self.buttons_initialized.emit(is_initialized, button_count)
|
||||
Reference in New Issue
Block a user