def read(sock, data): try: """ Analysis command @param sock the socket of client @param data the read data """ read_count = 0 code = int(unpack("<H", data[0:2])[0]) read_count += 2 cmd = Command(code) num_arg = int(unpack("<H", data[2:4])[0]) read_count += 2 for i in range(0, num_arg, 1): """Read all argument""" arg_code = int(unpack("<H", data[read_count:read_count+2])[0]) read_count += 2 #Argument type arg_type = int(unpack("B", data[read_count:read_count + 1])[0]) read_count += 1 if arg_type == Argument.STRING: #string len str_len = int(unpack("<I", data[read_count:read_count + 4])[0]) read_count += 4 str_val = str(unpack(str(str_len)+"s", data[read_count:read_count + str_len])[0]) read_count += str_len cmd.add_string(arg_code, str_val) elif arg_type == Argument.RAW: raw_len = int(unpack("<I", data[read_count:read_count + 4])[0]) read_count += 4 raw_data = data[read_count, read_count + raw_len] read_count += raw_len cmd.add_raw(arg_code, raw_data) elif arg_type == Argument.BYTE: byte_val = int(unpack("B", data[read_count:read_count + 1])[0]) read_count += 1 cmd.add_byte(arg_code, byte_val) elif arg_type == Argument.SHORT: short_val = int(unpack("<H", data[read_count:read_count + 2])[0]) read_count += 2 cmd.add_short(arg_code, short_val) elif arg_type == Argument.INT: int_val = int(unpack("<i", data[read_count:read_count + 4])[0]) read_count += 4 cmd.add_int(arg_code, int_val) elif arg_type == Argument.LONG: long_val = long(unpack("<L", data[read_count:read_count + 8])[0]) read_count += 8 cmd.add_long(arg_code, long_val) analysis_message(sock, cmd) except Exception: pass pass
def analysis_message_game_ready(sock, cmd): is_ready = cmd.get_int(Argument.ARG_CODE, 0) room_id = cmd.get_int(Argument.ARG_ROOM_ID, 0) """Search sock in room_info list""" room = room_list.get(room_id) if None != room: if room.sock1 == sock: #Send to opponent sock ready_cmd = Command(Command.CMD_GAME_READY) ready_cmd.add_string(Argument.ARG_PLAYER_USERNAME, sock_name_map.get(sock, "no name")) ready_cmd.add_byte(Argument.ARG_CODE, is_ready) send(room.sock2, ready_cmd) if is_ready == 1: room.ready[0] = True else: room.ready[0] = False elif room.sock2 == sock: ready_cmd = Command(Command.CMD_GAME_READY) ready_cmd.add_string(Argument.ARG_PLAYER_USERNAME, sock_name_map.get(sock, "no name")) ready_cmd.add_byte(Argument.ARG_CODE, is_ready) send(room.sock1, ready_cmd) #Send to opponent sock if is_ready == 1: room.ready[1] = True else: room.ready[1] = False if room.is_all_ready(): "Send start game message if 2 player ready" start_cmd = Command(Command.CMD_GAME_START) send(room.sock1, start_cmd) send(room.sock2, start_cmd) "Generate map" map_cmd = Command(Command.CMD_MAP_INFO) map_cmd.add_string(Argument.ARG_PLAYER_USERNAME, sock_name_map[room.sock1]) # map_cmd.add_string(Argument.ARG_PLAYER_USERNAME, "linhnv") map_id = random.randint(1, 2) map_cmd.add_int(Argument.ARG_MAP_ID, map_id) send(room.sock1, map_cmd) send(room.sock2, map_cmd) pass pass pass