55 lines
1.6 KiB
Python
55 lines
1.6 KiB
Python
from typing import Callable
|
|
|
|
from hardware.screen.screen import Screen
|
|
from models.clock import Clock
|
|
|
|
class ClockService:
|
|
|
|
_screen : Screen
|
|
_white_clock : Clock
|
|
_black_clock : Clock
|
|
|
|
on_terminated : Callable[[], None]
|
|
|
|
def __init__(self):
|
|
self._screen = Screen()
|
|
self._screen.enableBackground()
|
|
self._screen.displayMessage("Waiting...")
|
|
|
|
def start(self, time_control : int, increment : int):
|
|
self._white_clock = self.__init_clock(time_control, increment)
|
|
self._black_clock = self.__init_clock(time_control, increment)
|
|
|
|
self._white_clock.start()
|
|
|
|
def stop(self):
|
|
self._white_clock.stop()
|
|
self._black_clock.stop()
|
|
|
|
def switch(self):
|
|
if self._white_clock.is_running():
|
|
self._white_clock.stop()
|
|
self._black_clock.start()
|
|
|
|
elif self._black_clock.is_running():
|
|
self._black_clock.stop()
|
|
self._white_clock.start()
|
|
|
|
def set_on_terminated(self, callback : Callable[[], None]):
|
|
self.on_terminated = callback
|
|
|
|
def __init_clock(self, time_control : int, increment : int) -> Clock:
|
|
clock = Clock(time_control, increment)
|
|
clock.set_on_update(self.__tick)
|
|
clock.set_on_terminated(self.__terminate)
|
|
return clock
|
|
|
|
def __tick(self, formatted_time : str) -> None:
|
|
self.__update_screen(f"W {self._white_clock.clock_to_str()} \n B {self._black_clock.clock_to_str()}")
|
|
|
|
def __terminate(self) -> None:
|
|
self.__update_screen("Time is over !")
|
|
self.on_terminated()
|
|
|
|
def __update_screen(self, message : str) -> None:
|
|
self._screen.displayMessage(message) |