Send UTC time
This commit is contained in:
28
app.py
28
app.py
@@ -2,7 +2,7 @@ import asyncio
|
||||
import json
|
||||
import uuid
|
||||
from collections.abc import Iterator
|
||||
from datetime import datetime, timedelta
|
||||
from datetime import datetime, timedelta, timezone
|
||||
from enum import Enum
|
||||
from itertools import product
|
||||
from pathlib import Path
|
||||
@@ -166,13 +166,13 @@ class Room:
|
||||
self.turn = Color.WHITE
|
||||
self.board = Board()
|
||||
self.players = []
|
||||
self.last_move = datetime.now()
|
||||
self.last_move = datetime.now(timezone.utc)
|
||||
self.game_start = None
|
||||
self.state = State.NOT_FINISHED
|
||||
|
||||
def start(self):
|
||||
self.last_move = datetime.now()
|
||||
self.game_start = datetime.now()
|
||||
self.last_move = datetime.now(timezone.utc)
|
||||
self.game_start = datetime.now(timezone.utc)
|
||||
|
||||
def add_player(self) -> None | tuple[str, Color]:
|
||||
np: int = len(self.players)
|
||||
@@ -218,12 +218,25 @@ async def join(request, room_id):
|
||||
"turn": room.turn.value,
|
||||
"board": room.board.serialize(),
|
||||
"ready": len(room.players) == 2,
|
||||
"state": room.state.value,
|
||||
"start_time": (
|
||||
room.game_start or datetime.now(timezone.utc)
|
||||
).isoformat(),
|
||||
},
|
||||
)
|
||||
else:
|
||||
return JSONResponse(
|
||||
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):
|
||||
for key in rooms:
|
||||
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]
|
||||
if (
|
||||
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
|
||||
):
|
||||
room.state = State.TIE
|
||||
@@ -462,6 +475,7 @@ async def poll(request, room_id):
|
||||
"board": room.board.serialize(),
|
||||
"ready": len(room.players) == 2,
|
||||
"state": room.state.value,
|
||||
"start_time": (room.game_start or datetime.now(timezone.utc)).isoformat(),
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user