prevent double-play through race condition
This commit is contained in:
@ -2,7 +2,7 @@ from app_instance import api
|
||||
|
||||
from wiz_game import the_game
|
||||
from starlette.websockets import WebSocketDisconnect
|
||||
|
||||
import asyncio
|
||||
|
||||
@api.route("/player/{player}")
|
||||
def show(req, resp, player: str):
|
||||
@ -31,19 +31,28 @@ def show(req, resp, player: str):
|
||||
|
||||
@api.route("/player/{player}/play/{card}")
|
||||
async def play(req, resp, player: str, card: str):
|
||||
lock = asyncio.Lock()
|
||||
p = int(player)
|
||||
c = int(card)
|
||||
the_game.play_card(p, c)
|
||||
if the_game.is_hand_finished():
|
||||
print("hand finished")
|
||||
trick_winner, highest_card = the_game.get_trick_winner()
|
||||
trick_winner.take_trick()
|
||||
#the_game.next_hand()
|
||||
elif the_game.is_trick_finished():
|
||||
print("trick finished")
|
||||
trick_winner, highest_card = the_game.get_trick_winner()
|
||||
trick_winner.take_trick()
|
||||
the_game.next_trick()
|
||||
|
||||
async with lock:
|
||||
try:
|
||||
isActive = the_game.players_ordered[the_game.active_player].id == p
|
||||
except IndexError:
|
||||
isActive = False
|
||||
print("show p: {} | {}".format('None', p))
|
||||
if isActive:
|
||||
the_game.play_card(p, c)
|
||||
if the_game.is_hand_finished():
|
||||
print("hand finished")
|
||||
trick_winner, highest_card = the_game.get_trick_winner()
|
||||
trick_winner.take_trick()
|
||||
#the_game.next_hand()
|
||||
elif the_game.is_trick_finished():
|
||||
print("trick finished")
|
||||
trick_winner, highest_card = the_game.get_trick_winner()
|
||||
trick_winner.take_trick()
|
||||
the_game.next_trick()
|
||||
|
||||
url = '/player/'+player
|
||||
for ws in the_game.websockets:
|
||||
|
Reference in New Issue
Block a user