예제 #1
0
    def requestDataServer(self, content):
        try:
            # requset to data server. send certification key
            self.data_sock = socket.create_connection(self.dtp_server_address)
            send_data = Protocol.DataRequest(command=content,
                                             cert_key=(self.user_data.certkey))
            logging.debug(send_data)
            with self.data_sock.makefile("rwb", 0) as f:
                f.write(send_data.serialize())
                recv_data = self.parser.parse(f)

                logging.debug(recv_data)
        except Exception as e:
            logging.debug(e)
            recv_data = None
        else:
            try:
                # temp = self.data_sock.recv(recv_data.file_size[0])
                for i in range(recv_data.file_count):
                    size = 0
                    with open(
                            here("clientdata/" +
                                 bytes.decode(recv_data.file_name[i]) +
                                 ".pdf"), "wb") as save_file:
                        while recv_data.file_size[i] > size:
                            if recv_data.file_size[i] - size < READ_SIZE:
                                temp = self.data_sock.recv(
                                    recv_data.file_size[i] - size)
                            else:
                                temp = self.data_sock.recv(READ_SIZE)
                            size += READ_SIZE
                            save_file.write(temp)
                            # logging.debug(temp)
                    logging.debug(size)

                for i in range(recv_data.file_count):
                    size = 0
                    with open(
                            here("clientdata/" +
                                 bytes.decode(recv_data.file_name[i]) +
                                 ".jpg"), "wb") as save_file:
                        while recv_data.img_file_size[i] > size:
                            if recv_data.img_file_size[i] - size < READ_SIZE:
                                temp = self.data_sock.recv(
                                    recv_data.img_file_size[i] - size)
                            else:
                                temp = self.data_sock.recv(READ_SIZE)
                            size += READ_SIZE
                            save_file.write(temp)
                            # logging.debug(temp)
                for i in range(recv_data.file_count):
                    rdata = ""
                    with open(
                            here("clientdata/" +
                                 bytes.decode(recv_data.file_name[i]) +
                                 ".xml"), "w") as save_file:
                        with self.data_sock.makefile("rwb", 0) as f:
                            # rdata += bytes.decode(f.readall())
                            rdata = self.parser.parse(f)
                            logging.debug(rdata)
                            save_file.write(bytes.decode(rdata.memo_content))
                            # save_file.write(rdata)

                            # receive file data
                            # with self.data_sock.makefile("rwb,0") as f:
                            # send ACK
                            #     f.write(Protocol.DataTranferRequest())

            except Exception as e:
                logging.debug(e)
        finally:
            if self.data_sock:
                self.data_sock.close()
        return recv_data