Files
board-mate/rpi/controllers/GameController.py
2025-12-31 16:51:54 +01:00

76 lines
2.6 KiB
Python

import threading
import requests
from flask import jsonify, request
from services.game_service import GameService
class GameController:
_game_service : GameService
_has_started : bool
_auth_token : str
def __init__(self, app):
self._game_service = GameService()
self._register_routes(app)
self._auth_token = "0eed89e8-7625-4f8d-bf2a-0872aede0efb"
self._has_started = False
def _register_routes(self, app):
app.add_url_rule("/command/party/start", view_func=self.start_party, methods=['POST'])
app.add_url_rule("/command/party/play", view_func=self.make_move, methods=['POST'])
def start_party(self):
try:
data = request.get_json()
if data is None:
raise Exception("Data must be provided")
white_name = data["white_name"]
black_name = data["black_name"]
time_control = int(data["time_control"])
increment = int(data["increment"])
self._game_service.start(white_name, black_name, time_control, increment)
self._has_started = True
return jsonify({"status": "ok", "message": "Game started"}), 200
except Exception as ex:
print(ex)
return jsonify({"status": "error", "message": f"An error occurred : {ex}"}), 500
def make_move(self):
try:
if not self._has_started:
return jsonify({"status": "error", "message": "Game hasn't started yet"}), 400
auth_token = request.headers.get("Authorization")
if auth_token != "Bearer " + self._auth_token:
return jsonify({"status": "error", "message": "Invalid authorization token"}), 401
img, fen = self._game_service.make_move()
threading.Thread(
target=self.__send_detection_result,
args=("https://192.168.15.125:1880/party/image", img, fen),
daemon=True
).start()
return jsonify({"status": "ok"}), 200
except Exception as ex:
print(ex)
return jsonify({"status": "error", "message": f"An error occurred : {ex}"}), 500
def __send_detection_result(self, url, img, fen):
try:
headers = {'Content-Type': 'image/jpeg'}
body = {'frame': img, 'fen': fen}
response = requests.post(
url,
data=body,
headers=headers,
verify=False)
print(response.status_code)
except Exception as e:
print(e)