def handle_msg(self, message): """ Handles messages received from the game server """ print("[[ In handle_msg ]]") msg = DiscardMessage.to_obj(message) if all((msg.cmd == ClientRcvMessage.GAME_MESSAGE_REP.value, msg.get_payload_value(value='prompt') == ClientRcvMessage.GAME_CAN_BE_STARTED_REP.value)): print("[[ Starting game ]]") if self.has_initialised == False: self.has_initialised = True self.start_game() self.choose_initial_player() elif all( (msg.cmd == ClientRcvMessage.GAME_MESSAGE_REP.value, msg.get_payload_value( value='prompt') == ClientRcvMessage.GAME_HAS_STARTED_REP.value )): print("[[ Joining stared game ]]") if self.has_initialised == False: self.has_initialised = True self.choose_initial_player() elif msg.cmd == ClientRcvMessage.ASK_FOR_ROOMATES_REP: self.show_roomates() print("Received game message from server: ", msg) if self.has_initial_player_been_choosen == True: print("Setting message for eventual processing") self.player.set_message_to_process(msg)
def find_room(self): """ This finds rooms :returns: bool -- True if rooms has been found. False if otherwise """ print('==== Getting rooms to play the game ====') param = {'cmd': RoomRequest.GET_ROOMS.value} req = requests.get(self.room_url, params=param) rooms = DiscardMessage.to_obj(req.text) if rooms.get_payload_value(value='data'): ls = [{ key: value for key, value in value.items() if key != 'roomid' } for value in rooms.get_payload_value(value='data')] ls[:] = [ str(ind) + ') ' + repr(value) for ind, value in enumerate(ls) ] room_str = '\n'.join(ls) print('The rooms available:', '\n', room_str) choice = self.get_int_input('Choose room to join: ') while choice >= len(ls): choice = self.get_int_input('Choose room to join: ') room_ = rooms.get_payload_value(value='data') room = room_[choice] return room print( "Can't find rooms. You can try to find rooms again(Recommended) or create a room." ) return None
def print_currently_playing(self): print("[[ In print_currently_playing ]]") param = { 'cmd': RoomRequest.GET_CURRENT_PLAYER.value, 'roomid': self.player.get_room_id() } rep = requests.get(self.room_url, params=param) response = DiscardMessage.to_obj(rep.text) return (response.get_payload_value(value='prompt'), response.get_payload_value(value='data'))
def start_game(self): """ This sends a START_GAME request to game server """ msg_ = { 'userid': self.player.get_user_id(), 'roomid': self.player.get_room_id() } param = {'cmd': RoomRequest.START_GAME.value} req = requests.post(self.room_url, json=msg_, params=param) response = DiscardMessage.to_obj(req.text) print(response)
def choose_initial_player(self): print("[[ In choose_initial_player ]]") param = {'cmd': RoomRequest.SET_FIRST_PLAYER.value} msg_ = { 'userid': self.player.get_user_id(), 'roomid': self.player.get_room_id(), 'username': self.player.get_nickname() } rep = requests.post(self.room_url, params=param, json=msg_) response = DiscardMessage.to_obj(rep.text) print(response.get_payload_value(value='prompt'), response.get_payload_value(value='data')) if self.has_initial_player_been_choosen == False: self.has_initial_player_been_choosen = True
def show_roomates(self): """ This shows roomates """ param = { 'cmd': RoomRequest.GET_ROOMATES.value, 'userid': self.player.get_user_id(), 'roomid': self.player.get_room_id() } req = requests.get(self.room_url, params=param) response = DiscardMessage.to_obj(req.text) ls = [ str(ind) + ') ' + value for ind, value in enumerate( response.get_payload_value(value='data')) ] if ls: room_str = '\n'.join(ls) print('My roomates:', '\n', room_str) else: print('You have no roomates yet!!')
def join_room(self, room=None): """ This adds current player to room :param room: Room to join """ print('=== Joining room ===') self.create_new_user() self.player.set_room_id(room['roomid']) print('You selected: ', self.player.get_room_id()) param = {'cmd': RoomRequest.JOIN_ROOM.value} msg = { 'username': self.player.get_nickname(), 'userid': self.player.get_user_id(), 'roomid': room['roomid'] } req = requests.post(self.room_url, json=msg, params=param) response = DiscardMessage.to_obj(req.text) print(response)
def create_room(self): """ This creates a room """ print("=== Creating a room ===") self.create_new_user() question = "What is the room's name? " room_name = self.get_str_input(question) question = 'How many players do you want to play with: ' num_of_players = self.get_int_input(question) while num_of_players == 0: num_of_players = self.get_int_input(question) msg = {'username': self.player.get_nickname(), \ 'userid': self.player.get_user_id(), \ 'num_of_players': num_of_players, 'room_name': room_name} param = {'cmd': RoomRequest.CREATE_A_ROOM.value} req = requests.post(self.room_url, json=msg, params=param) response = DiscardMessage.to_obj(req.text) print("Your new room id=", response.get_payload_value(value='data')) self.player.set_room_id(response.get_payload_value(value='data'))
def on_message(self, msg): # called anytime a new message is received print("Received from client ,msg=", msg) self.controller.handle_wsmessage(DiscardMessage.to_obj(msg))