From 9e259bb9fb5fc469852711af154ec7a45fead986 Mon Sep 17 00:00:00 2001 From: Laurent Date: Mon, 15 Dec 2025 10:23:46 +0100 Subject: [PATCH] Added clock logic --- rpi/main.py | 16 ++++-- rpi/{services => models}/__init__.py | 0 rpi/models/clock.py | 76 ++++++++++++++++++++++++++++ rpi/models/player.py | 5 ++ rpi/services/board_mate_service.py | 22 -------- 5 files changed, 93 insertions(+), 26 deletions(-) rename rpi/{services => models}/__init__.py (100%) create mode 100644 rpi/models/clock.py create mode 100644 rpi/models/player.py delete mode 100644 rpi/services/board_mate_service.py diff --git a/rpi/main.py b/rpi/main.py index 8988c1e0..32eb2e47 100644 --- a/rpi/main.py +++ b/rpi/main.py @@ -2,18 +2,24 @@ from board_mate_client import ApiClient, Configuration from controllers.board_mate_controller import ApiController +from models.clock import Clock +from scripts.timer.grove_rgb_lcd import setRGB, setText if __name__ == "__main__": config = Configuration( host="http://192.168.15.117:8000" ) - + setRGB(255, 255, 255) controller = ApiController(config) white_name = input("White Name: ") black_name = input("Black Name: ") time_value = int(input("Time value: ")) increment = int(input("Increment: ")) + + white_clock = Clock(time_value, increment) + black_clock = Clock(time_value, increment) + print("Creating the party...") game_id = controller.create_party(white_name, black_name, time_value, increment) @@ -24,16 +30,18 @@ if __name__ == "__main__": print("Party Created!") currentPlayer = 0 + white_clock.start() while True: message = None if currentPlayer == 0 : message = "White to play" currentPlayer = 1 + white_clock.stop() else : message = "Black to play" currentPlayer = 0 + black_clock.start() move = input(f"{message} : ") - - controller.add_move(game_id, move) - + setText(f"W ${white_clock.clock_to_str()}\n B ${black_clock.clock_to_str()}") + controller.add_move(game_id, move) \ No newline at end of file diff --git a/rpi/services/__init__.py b/rpi/models/__init__.py similarity index 100% rename from rpi/services/__init__.py rename to rpi/models/__init__.py diff --git a/rpi/models/clock.py b/rpi/models/clock.py new file mode 100644 index 00000000..594cc16f --- /dev/null +++ b/rpi/models/clock.py @@ -0,0 +1,76 @@ +import threading +import time +from datetime import datetime + + +class Clock: + def __init__(self, value: int, increment: int) -> None: + self.millis = value * 1000 + self.increment = increment * 1000 + + self._run_event = threading.Event() + self._terminate_event = threading.Event() + self._lock = threading.Lock() + + self.thread = threading.Thread(target=self._update_clock, daemon=True) + + # ---------- time computation ---------- + + def _compute_seconds(self) -> int: + return (self.millis // 1000) % 60 + + def _compute_minutes(self) -> int: + return self.millis // 60000 + + def _add_increment(self) -> None: + self.millis += self.increment + + # ---------- thread logic ---------- + + def _update_clock(self): + while not self._terminate_event.is_set(): + self._run_event.wait() + + with self._lock: + if self.millis <= 0: + self.millis = 0 + self._run_event.clear() + break + + self.millis -= 1 + + time.sleep(0.001) + # ---------- public API ---------- + def is_running(self) -> bool: + return self._run_event.is_set() + + def start(self) -> None: + self._run_event.set() + if not self.thread.is_alive(): + self.thread = threading.Thread(target=self._update_clock, daemon=True) + self.thread.start() + + def stop(self) -> None: + if self._run_event.is_set(): + with self._lock: + self._add_increment() + self._run_event.clear() + + def terminate(self) -> None: + self._terminate_event.set() + self._run_event.set() + self.thread.join() + + def clock_to_str(self) -> str: + with self._lock: + minutes = self._compute_minutes() + seconds = self._compute_seconds() + return f"{minutes:02d}:{seconds:02d}" + + +if __name__ == "__main__": + clock = Clock(600, 0) + clock.start() + while True: + time.sleep(1) + print(clock.clock_to_str()) \ No newline at end of file diff --git a/rpi/models/player.py b/rpi/models/player.py new file mode 100644 index 00000000..1e14e0f7 --- /dev/null +++ b/rpi/models/player.py @@ -0,0 +1,5 @@ +from clock import Clock + +class Player: + def __init__(self) -> None: + pass \ No newline at end of file diff --git a/rpi/services/board_mate_service.py b/rpi/services/board_mate_service.py deleted file mode 100644 index 17fc168e..00000000 --- a/rpi/services/board_mate_service.py +++ /dev/null @@ -1,22 +0,0 @@ -import requests -import os -from dotenv import load_dotenv - -def query_api(url, params=None, headers=None, timeout=10): - response = requests.get( - url, - params=params, - headers=headers, - timeout=timeout - ) - response.raise_for_status() # Raises an error for 4xx/5xx responses - return response.json() - -if __name__ == "__main__": - load_dotenv() - - url = "https://api.example.com/users" - params = {"limit": 10} - - data = query_api(url, params=params) - print(data) \ No newline at end of file