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