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)) | ||||
| 
 | ||||
| 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 | ||||
|  | ||||
| @ -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") | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user