From d7699c009bf051c256cdd39a077f4a26f8b822ba Mon Sep 17 00:00:00 2001 From: massahito <110250805+massahito@users.noreply.github.com> Date: Sun, 20 Oct 2024 20:55:07 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20refs=20#224=20PongGame=E3=81=A7?= =?UTF-8?q?=E4=B8=80=E6=99=82=E5=81=9C=E6=AD=A2=E3=82=92=E5=8F=AF=E8=83=BD?= =?UTF-8?q?=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pong/pong/static/pong/components/PongGame.js | 6 ++++++ .../static/pong/components/PongGameHome.js | 6 ++++++ .../pong/components/PongGameTournament.js | 19 ++++++++++++++++++- pong/realtime_pong_game/roommanager.py | 18 +++++++++++++++++- 4 files changed, 47 insertions(+), 2 deletions(-) diff --git a/pong/pong/static/pong/components/PongGame.js b/pong/pong/static/pong/components/PongGame.js index 06efbf79..383334aa 100644 --- a/pong/pong/static/pong/components/PongGame.js +++ b/pong/pong/static/pong/components/PongGame.js @@ -89,6 +89,12 @@ export class PongGame extends Component { case "tournament-winner": this.setRouteContext("TournamentWinner", message.contents); break; + case "timeout": + if (document.getElementById("timeoutMessage")) { + document.getElementById("timeoutMessage").innerHTML = + "Timeout requested."; + } + break; } }; diff --git a/pong/pong/static/pong/components/PongGameHome.js b/pong/pong/static/pong/components/PongGameHome.js index f3b42285..1ddb734a 100644 --- a/pong/pong/static/pong/components/PongGameHome.js +++ b/pong/pong/static/pong/components/PongGameHome.js @@ -51,6 +51,12 @@ export class PongGameHome extends Component { alert(message.contents); this.goNextPage("/error"); break; + case "timeout": + if (document.getElementById("timeoutMessage")) { + document.getElementById("timeoutMessage").innerHTML = + "Timeout requested."; + } + break; } }; diff --git a/pong/pong/static/pong/components/PongGameTournament.js b/pong/pong/static/pong/components/PongGameTournament.js index 29f2230a..807c16d3 100644 --- a/pong/pong/static/pong/components/PongGameTournament.js +++ b/pong/pong/static/pong/components/PongGameTournament.js @@ -11,6 +11,7 @@ export class PongGameTournament extends Component { alert("connection failed."); this.goNextPage("/"); } + this.connection = this.getRouteContext("PongGameWebSocket"); const tournamentContext = this.getRouteContext("Tournament"); this.bracket = new PongGameTournamentBracket( this.route, @@ -20,12 +21,28 @@ export class PongGameTournament extends Component { ); this.element.appendChild(this.bracket.element); this.unsetRouteContext("Tournament"); + this.timeoutButton = document.getElementById("timeoutButton"); + if (this.timeoutButton) { + this.timeoutButton.onclick = this.onClickTimeoutButton; + } } + onClickTimeoutButton = async () => { + this.connection.send( + JSON.stringify({ + sender: "player", + type: "timeout", + contents: "timeout", + }), + ); + }; + get html() { return ` -

Pong-Game Tournament

+ +

`; } diff --git a/pong/realtime_pong_game/roommanager.py b/pong/realtime_pong_game/roommanager.py index c25067f7..44f8a352 100644 --- a/pong/realtime_pong_game/roommanager.py +++ b/pong/realtime_pong_game/roommanager.py @@ -67,6 +67,7 @@ def __init__(self, room_name, number_of_players): self.participants_state = dict() self.max_of_participants = int(number_of_players) self.game_results = [] + self.is_timeout = False def set_room_state(self, new_room_state): with self.instance_lock: @@ -167,6 +168,19 @@ async def send_room_state_to_group(self): async def on_receive_user_message(self, participant, message_json): if self.room_state == RoomState.In_Game: await self.handle_game_action(participant, message_json) + elif self.room_state == RoomState.Display_Tournament: + self.is_timeout = True + await self.channel_layer.group_send( + self.room_name, + { + "type": "send_room_information", + "contents": { + "sender": "room-manager", + "type": "timeout", + "contents": "timeout", + }, + }, + ) def change_participants_state_for_game(self, player1, player2): for participant in self.participants_state.keys(): @@ -236,7 +250,9 @@ def game_dispatcher(self, dummy_data): # change room state to Display_Tournament self.set_room_state(RoomState.Display_Tournament) async_to_sync(self.send_room_state_to_group)() - time.sleep(3) + time.sleep(5) + if self.is_timeout is True: + time.sleep(30) # change room state to In_Game self.set_room_state(RoomState.In_Game) async_to_sync(self.send_room_state_to_group)()