Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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