def read(data): """ 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) print cmd.get_log() pass
def read(self): read_count = 0 code = int(unpack("<H", self.data[0:2])[0]) read_count += 2 cmd = Command(code) num_arg = int(unpack("<H", self.data[2:4])[0]) read_count += 2 for i in range(0, num_arg, 1): #Read all argument arg_code = int(unpack("<H", self.data[read_count:read_count+2])[0]) read_count += 2 #Argument type arg_type = int(unpack("B", self.data[read_count:read_count + 1])[0]) read_count += 1 if arg_type == Argument.STRING: #string len str_len = int(unpack("<I", self.data[read_count:read_count + 4])[0]) read_count += 4 str_val = str(unpack(str(str_len)+"s", self.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", self.data[read_count:read_count + 4])[0]) read_count += 4 raw_data = self.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", self.data[read_count:read_count + 1])[0]) read_count += 1 self.add_byte(arg_code, byte_val) elif arg_type == Argument.SHORT: short_val = int(unpack("<H", self.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", self.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", self.data[read_count:read_count + 8])[0]) read_count += 8 cmd.add_long(arg_code, long_val) print cmd.get_log()
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) print cmd.get_log() pass HOST, PORT = "localhost", 9090 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((HOST, PORT)) # cmd = Command(Command.CMD_ADD_FRIEND) # cmd.add_string(Argument.ARG_PLAYER_USERNAME, "giapnh") cmd = Command(Command.CMD_LOGIN) username = raw_input("Username:"******"Password:"******"You want chat with?") message = raw_input("Message:") cmd = Command(Command.CMD_PLAYER_CHAT) cmd.add_string(Argument.ARG_FRIEND_USERNAME, chat_with) cmd.add_string(Argument.ARG_MESSAGE, message) sock.sendall(cmd.get_bytes()) print cmd.get_log() data = sock.recv(1024) read(data)
read_count += 8 cmd.add_long(arg_code, long_val) print "Received: "+cmd.get_log() pass HOST, PORT = "localhost", 9090 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((HOST, PORT)) # cmd = Command(Command.CMD_ADD_FRIEND) # cmd.add_string(Argument.ARG_PLAYER_USERNAME, "giapnh") cmd = Command(Command.CMD_LOGIN) username = raw_input("Username:"******"Password:"******"You want chat with?") message = raw_input("Message:") cmd = Command(Command.CMD_PLAYER_CHAT) cmd.add_string(Argument.ARG_PLAYER_USERNAME, chat_with) cmd.add_string(Argument.ARG_MESSAGE, message) sock.sendall(cmd.get_bytes()) print "Send: "+cmd.get_log() data = sock.recv(1024) read(data)