diff --git a/app.py b/app.py index fef0bdb..1623c19 100644 --- a/app.py +++ b/app.py @@ -4,7 +4,7 @@ from flask import Flask import config from dto.requests import GameStartRequestDTO, GameDecisionRequestDTO -from services.julius_baer_api_client import JuliusBaerApiClient +from services.player import Player app = Flask(__name__) @@ -15,19 +15,9 @@ def hello_world(): # put application's code here if __name__ == '__main__': - jb_client = JuliusBaerApiClient() - # game_start_request = GameStartRequestDTO(player_name=config.API_TEAM) - # res = jb_client.start_game(game_start_request) - # - # game_decision_request = GameDecisionRequestDTO(decision="Accept", client_id=res.client_id, session_id=res.session_id) - # decision_response = jb_client.send_decision(game_decision_request) - # - # while decision_response.status == "active": - # game_decision_request = GameDecisionRequestDTO(decision="Accept", client_id=res.client_id, session_id=res.session_id) - # decision_response = jb_client.send_decision(game_decision_request) - # - # if decision_response.status == "gameover": - # logging.info("Game over") + + player = Player() + player.play_on_separate_thread() app.run() diff --git a/services/player.py b/services/player.py index 3b24805..3cae73f 100644 --- a/services/player.py +++ b/services/player.py @@ -1,4 +1,6 @@ import logging +import threading +import time from typing import Literal, Dict, Any import config from dto.requests import GameStartRequestDTO, GameDecisionRequestDTO @@ -9,18 +11,29 @@ class Player: def __init__(self): self.client = JuliusBaerApiClient() + self._thread = None def start(self): self.play() + def play_on_separate_thread(self): + if self._thread and self._thread.is_alive(): + logging.warning('Game loop already running.') + return self._thread + + self._thread = threading.Thread(target=self.play, daemon=True) + self._thread.start() + return self._thread + def play(self): + print('playing') payload = GameStartRequestDTO(player_name=config.API_TEAM) start_response = self.client.start_game(payload) logging.info(start_response) status = '' decision = self.make_decision(start_response.client_data) - while status != 'gameover': + while status not in ['gameover', 'complete']: payload = GameDecisionRequestDTO( decision=decision, @@ -29,10 +42,10 @@ class Player: ) decision_response = self.client.send_decision(payload) - logging.info(decision_response) + print(decision_response.status, decision_response.score) status = decision_response.status decision = self.make_decision(decision_response.client_data) - + time.sleep(1.5) def make_decision(self, client_data: Dict[str, Any]) -> Literal["Accept", "Reject"]: # Do your magic!