prevent double-play through race condition
This commit is contained in:
parent
fb638a60dc
commit
7ea63ce623
@ -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:
|
||||
|
@ -209,6 +209,6 @@ class WizGame:
|
||||
return self.start_player-1
|
||||
|
||||
|
||||
p = ["Astrid", "Stephan", "Patrice", "struppi"]
|
||||
p = ["A", "B", "C", "D", "E"]
|
||||
the_game = WizGame(p)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user