Send UTC time

This commit is contained in:
0880
2026-01-18 19:06:57 +03:30
parent 56a01ac5a7
commit 460255db9e

28
app.py
View File

@@ -2,7 +2,7 @@ import asyncio
import json import json
import uuid import uuid
from collections.abc import Iterator from collections.abc import Iterator
from datetime import datetime, timedelta from datetime import datetime, timedelta, timezone
from enum import Enum from enum import Enum
from itertools import product from itertools import product
from pathlib import Path from pathlib import Path
@@ -166,13 +166,13 @@ class Room:
self.turn = Color.WHITE self.turn = Color.WHITE
self.board = Board() self.board = Board()
self.players = [] self.players = []
self.last_move = datetime.now() self.last_move = datetime.now(timezone.utc)
self.game_start = None self.game_start = None
self.state = State.NOT_FINISHED self.state = State.NOT_FINISHED
def start(self): def start(self):
self.last_move = datetime.now() self.last_move = datetime.now(timezone.utc)
self.game_start = datetime.now() self.game_start = datetime.now(timezone.utc)
def add_player(self) -> None | tuple[str, Color]: def add_player(self) -> None | tuple[str, Color]:
np: int = len(self.players) np: int = len(self.players)
@@ -218,12 +218,25 @@ async def join(request, room_id):
"turn": room.turn.value, "turn": room.turn.value,
"board": room.board.serialize(), "board": room.board.serialize(),
"ready": len(room.players) == 2, "ready": len(room.players) == 2,
"state": room.state.value,
"start_time": (
room.game_start or datetime.now(timezone.utc)
).isoformat(),
}, },
) )
else: else:
return JSONResponse( return JSONResponse(
request, request,
{"code": "FULL", "error": "Room Full", "board": room.board.serialize()}, {
"code": "FULL",
"error": "Room Full",
"board": room.board.serialize(),
"turn": room.turn.value,
"state": room.state.value,
"start_time": (
room.game_start or datetime.now(timezone.utc)
).isoformat(),
},
) )
@@ -445,11 +458,11 @@ async def move(request: Request, room_id):
async def poll(request, room_id): async def poll(request, room_id):
for key in rooms: for key in rooms:
room = rooms[key] room = rooms[key]
if (datetime.now() - room.last_move) >= timedelta(hours=24): if (datetime.now(timezone.utc) - room.last_move) >= timedelta(hours=24):
del rooms[key] del rooms[key]
if ( if (
room.game_start room.game_start
and (datetime.now() - room.game_start) >= timedelta(minutes=30) and (datetime.now(timezone.utc) - room.game_start) >= timedelta(minutes=30)
and room.state == State.NOT_FINISHED and room.state == State.NOT_FINISHED
): ):
room.state = State.TIE room.state = State.TIE
@@ -462,6 +475,7 @@ async def poll(request, room_id):
"board": room.board.serialize(), "board": room.board.serialize(),
"ready": len(room.players) == 2, "ready": len(room.players) == 2,
"state": room.state.value, "state": room.state.value,
"start_time": (room.game_start or datetime.now(timezone.utc)).isoformat(),
} }