Send UTC time
This commit is contained in:
28
app.py
28
app.py
@@ -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(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user