Esempio n. 1
0
    def handle(self):
        server_interface.send_log('[%s] is connected\n' %
                                  self.client_address[0])
        global save
        save = []
        try:
            username = self.registerUsername()

            for user in self.userman.users:
                if user is not username:
                    self.request.send(("[%s] has joined." % user).encode())

            msg = self.request.recv(1024)

            while msg:
                data = msg.decode('utf-8')
                print(data)

                data_list = data.split(" ")

                if data_list[0] == username and data_list[
                        1] in self.userman.users:
                    conn, addr = self.userman.users[data_list[1]]
                    #conn.send(data.encode())
                    save.append(data)
                    if len(save) % 10 == 0:
                        for name in self.minerman.users:
                            conn, addr = self.minerman.users[name]
                            for i in range(0, 10):
                                tx = save[i]
                                print(tx)
                                conn.send(tx.encode())
                                time.sleep(0.01)
                            for i in range(10):
                                save.pop(0)
                            time.sleep(3)
                            server_interface.send_log('Block Received\n')
                            fr = open('block.txt', 'r')
                            server_interface.send_log(
                                'Successfully Opened Block\n')
                            last_dict = fr.readlines()[-1].rstrip()
                            hash, signature, public_key = Block.brick_hash(
                                last_dict)
                            server_interface.send_log('Validation Process: ')
                            server_interface.send_log(
                                str(
                                    KeyGenerator.validation(
                                        last_dict.encode('utf-8'), signature,
                                        KeyGenerator.readKey())) + " ")
                            server_interface.send_log(
                                'Send Block to Participants\n')
                            self.userman.sendMessageToAll(
                                'Validated Block Sent\n')
                            break
                    else:
                        conn.send(data.encode())
                else:
                    conn, addr = self.userman.users[username]
                    conn.send("Invalid transaction".encode())
                msg = self.request.recv(1024)

        except Exception as e:
            server_interface.send_log('in error\n')
            server_interface.send_log(str(e) + "\n")

        server_interface.send_log('[%s] Termination\n' %
                                  self.client_address[0])
        self.userman.removeUser(username)