make GameInfo object manages itself + /joinGame endpoint
This commit is contained in:
parent
3beabd84aa
commit
1bcc552756
@ -20,16 +20,32 @@ def random_string(length: int) ->str:
|
|||||||
"""
|
"""
|
||||||
return "".join(random.choice(string.ascii_letters) for _ in range(length))
|
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:
|
class GameInfo:
|
||||||
"""
|
"""
|
||||||
The game info class stores all information linked to a active game
|
The game info class stores all information linked to a active game
|
||||||
|
|
||||||
GameInfo.id : str, the game identifier of the 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):
|
def __init__(self):
|
||||||
self.game_id = None
|
self.game_id = None
|
||||||
|
self.owner = None
|
||||||
|
self.members = []
|
||||||
|
|
||||||
def gen_jwt(self, username, owner):
|
def _gen_jwt(self, username, owner):
|
||||||
return jwt.encode(
|
return jwt.encode(
|
||||||
payload={
|
payload={
|
||||||
"game_id": self.game_id,
|
"game_id": self.game_id,
|
||||||
@ -41,6 +57,15 @@ class GameInfo:
|
|||||||
algorithm="HS256"
|
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():
|
def create_game():
|
||||||
"""
|
"""
|
||||||
@ -57,6 +82,12 @@ def create_game():
|
|||||||
#TODO ADD A WEBSOCKET IF THE GAME IS KNOWN TO BE MULTIPLAYER
|
#TODO ADD A WEBSOCKET IF THE GAME IS KNOWN TO BE MULTIPLAYER
|
||||||
return game
|
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):
|
def get_game_info(game_id):
|
||||||
"""
|
"""
|
||||||
This function retrieve a the GameInfo object linked to the game_id
|
This function retrieve a the GameInfo object linked to the game_id
|
||||||
|
@ -8,7 +8,6 @@ api_routes = flask.Blueprint("api", __name__)
|
|||||||
def create_game():
|
def create_game():
|
||||||
username = flask.request.args.get("username")
|
username = flask.request.args.get("username")
|
||||||
if username==None:
|
if username==None:
|
||||||
response = {}
|
|
||||||
return {"status": "error, username not set"}
|
return {"status": "error, username not set"}
|
||||||
|
|
||||||
|
|
||||||
@ -16,9 +15,28 @@ def create_game():
|
|||||||
response["status"] = "ok"
|
response["status"] = "ok"
|
||||||
game = game_functions.create_game()
|
game = game_functions.create_game()
|
||||||
response["game_id"] = game.id
|
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
|
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")
|
@api_routes.route("/getGameInfo")
|
||||||
def get_game_info():
|
def get_game_info():
|
||||||
response = {}
|
response = {}
|
||||||
|
Loading…
Reference in New Issue
Block a user