make GameInfo object manages itself + /joinGame endpoint

This commit is contained in:
Thomas Rubini 2022-11-29 12:07:14 +01:00
parent 3beabd84aa
commit 1bcc552756
No known key found for this signature in database
GPG Key ID: C7D287C8C1CAC373
2 changed files with 52 additions and 3 deletions

View File

@ -20,16 +20,32 @@ def random_string(length: int) ->str:
"""
return "".join(random.choice(string.ascii_letters) for _ in range(length))
class Member:
"""
stores information related to the member of a given game
Member.username : The username of this member
Member.socker : The reference to the socket to talk to this member
"""
def __init__(self, username):
self.username = username
self.socket = None
class GameInfo:
"""
The game info class stores all information linked to a active game
GameInfo.id : str, the game identifier of the game
GameInfo.owner : Member, the game identifier of the game
GameInfo.members : Member[], the members of the game
"""
def __init__(self):
self.game_id = None
self.owner = None
self.members = []
def gen_jwt(self, username, owner):
def _gen_jwt(self, username, owner):
return jwt.encode(
payload={
"game_id": self.game_id,
@ -41,6 +57,15 @@ class GameInfo:
algorithm="HS256"
)
def set_owner(self, username):
self.owner = Member(username)
self.members.append(self.owner)
return self.owner, self._gen_jwt(username, owner=True)
def add_member(self, username):
member = Member(username)
self.members.append(member)
return member, self._gen_jwt(username, owner=False)
def create_game():
"""
@ -57,6 +82,12 @@ def create_game():
#TODO ADD A WEBSOCKET IF THE GAME IS KNOWN TO BE MULTIPLAYER
return game
def get_game(game_id):
if game_id in game_lists:
return game_lists[game_id]
else:
return None
def get_game_info(game_id):
"""
This function retrieve a the GameInfo object linked to the game_id

View File

@ -8,7 +8,6 @@ api_routes = flask.Blueprint("api", __name__)
def create_game():
username = flask.request.args.get("username")
if username==None:
response = {}
return {"status": "error, username not set"}
@ -16,7 +15,26 @@ def create_game():
response["status"] = "ok"
game = game_functions.create_game()
response["game_id"] = game.id
response["jwt"] = game.gen_jwt(username=username, owner=True)
owner, owner_jwt = game.set_owner(username=username)
response["jwt"] = owner_jwt
return response
@api_routes.route("/joinGame")
def join_game():
game_id = flask.request.args.get("game_id")
username = flask.request.args.get("username")
if game_id==None or username==None:
return {"status": "error, username or game id not set"}
game = game_functions.get_game(game_id)
if game == None:
return {"status": "error, game does not exist"}
member, member_jwt = game.add_member(username)
response = {}
response["status"] = "ok"
response["jwt"] = member_jwt
return response
@api_routes.route("/getGameInfo")