Exemplo n.º 1
0
def sleep_thread():
    global balance
    global branches_all
    global branch_soc_list
    global port

    t = float(sys.argv[3])
    while 1:
        print "Sleeping for", t / 1000, "seconds"
        sleep(t / 1000)
        print "Woke up"
        transfer_msg = bank_pb2.Transfer()
        withdraw = randint(10, 50)
        val = random.choice(branch_soc_list.keys())
        if withdraw <= balance:
            transfer_msg.money = withdraw
            transfer_msg.src_branch = sys.argv[2]
            transfer_msg.dst_branch = str(val)
            send_message = bank_pb2.BranchMessage()
            send_message.transfer.CopyFrom(transfer_msg)
            lock = threading.Lock()
            lock.acquire()
            if not RECORD[int(val)]:
                print "Sending", withdraw, "to", val
                balance -= withdraw
                branch_soc_list[val].sendall(send_message.SerializeToString())
                print "Remaining balance is:", balance
            else:
                print "Not sending to", val
            lock.release()
Exemplo n.º 2
0
    def MoneyTransfer(self):
	global TOTAL_BALANCE
	global branchName
	global branhList
	global moneyTransfer
	global timeLimit
	while True:
		logger.debug("Money Transfer.............")
		logger.debug("Money Transfer Status = "+str(moneyTransfer) +"  Current Branch Balance = "+ str(TOTAL_BALANCE))
		if moneyTransfer == True and TOTAL_BALANCE>50:
			randomBranch = random.choice(branhList)
			print randomBranch.ip
			print randomBranch.port
			MoneyTransferMsg = bank_pb2.Transfer()
			MoneyTransferMsg.money = (int) ((TOTAL_BALANCE* random.randint(1,5)) /100)
			MoneyTransferMsg.src_branch = branchName
			with self.critical_section_lock:
				if moneyTransfer == True :
					TOTAL_BALANCE = TOTAL_BALANCE - MoneyTransferMsg.money
			branchsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            		branchsocket.connect((randomBranch.ip, randomBranch.port))
			branchMessage = bank_pb2.BranchMessage()
                	branchMessage.transfer.CopyFrom(MoneyTransferMsg)
			branchsocket.sendall(pickle.dumps(branchMessage))
			branchsocket.close()
			print "Time limit +++++++ " + str(timeLimit)
			time.sleep(random.uniform(0, 5))
def sendTransactions():
    global BRANCH_NAME
    global BRANCH_BALANCE
    global BRANCH_LIST
    global isUpdate

    while doTransfer:
        random_entry = random.choice(BRANCH_LIST)
        if BRANCH_BALANCE > 50:
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            s.connect((random_entry["ip"], random_entry["port"]))
            transfer = bank_pb2.Transfer()
            transfer.money = (BRANCH_BALANCE * random.randrange(1, 5)) / 100
            msg = bank_pb2.BranchMessage()
            msg.transfer.CopyFrom(transfer)

            BRANCH_BALANCE = BRANCH_BALANCE - transfer.money

            s.sendall(pickle.dumps(msg))
            s.close()

            if MARKER_MSG > 1 or isCapturing:
                isUpdate = True
            print "TRANSFERRING %s to %s...Remainging Balance: %s\n" % (str(
                transfer.money), str(
                    random_entry["name"]), str(BRANCH_BALANCE))
        time.sleep(random.randrange(1, 5))
Exemplo n.º 4
0
    def run(self):
        while len(self.branch_worker.branch_names) == 0:
            sleep(1)

        while 1:
            sleep(random.randint(0, 5))
            branch_number = random.randint(
                0,
                len(self.branch_worker.branch_names) - 1)
            percent_amount = int(
                random.randint(1, 5) * self.branch_worker.balance / 100)

            if self.branch_worker.balance - percent_amount >= 0 and socket.gethostbyname(
                    socket.gethostname(
                    )) != self.branch_worker.branch_ip[branch_number]:
                self.branch_worker.mutex.acquire()
                self.branch_worker.balance -= percent_amount
                self.branch_worker.mutex.release()
                transfer_message = bank_pb2.Transfer()
                transfer_message.money = percent_amount
                self.branch_worker.client_branch_Message.transfer.money = transfer_message.money
                self.branch_worker.sock_dict.get(
                    self.branch_worker.branch_names[branch_number]).send(
                        self.branch_worker.client_branch_Message.
                        SerializeToString())
Exemplo n.º 5
0
def thread_sender(handler):
    addresses = []

    # Find addresses of all branches excpet itself
    while True:
        if handler.start_connecting:
            for i in range(0, handler.b_counter):
                if handler.b_names[i] != handler.name: 
                    address = (handler.b_ips[i], handler.b_ports[i])
                    addresses.append(address)
            break
    
    # Send message to periodically to every branch
    while True:
        if handler.markers_going:
            continue

        # print handler.name + ' has ' + str(handler.balance)
        amount = int(math.floor(randint(1, 5) * handler.balance / 100))
        # amount = 5
        if handler.balance - amount < 0:
            print handler.name + ' --> balance cannot be negative, will try again'
            continue

        dest = randint(0, handler.b_counter - 2)
        delay = randint(0,5)
        # delay = 0.05

        try:
            # print '     ' + handler.name + ' sends ' + str(amount) + ' to ' + str(addresses[dest])
            t = bank_pb2.Transfer()
            t.money = amount
            t.branch_name = handler.name

            msg = bank_pb2.BranchMessage()            
            msg.transfer.CopyFrom(t)

            balance_lock.acquire()
            if not handler.markers_going:
                handler.balance = handler.balance - amount
            balance_lock.release()
           
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            sock.connect(addresses[dest])
            if not handler.markers_going:
                sock.sendall(msg.SerializeToString())
        except:
            print handler.name + ' could not send the message'
        time.sleep(delay)
        sock.close()
Exemplo n.º 6
0
def transfer(branch):
    #print('Transfer message at port %i' % branch.port)
    branchName = branch.name
    interval = branch.interval
    minPercent = 1
    maxPercent = 5

    numBranches = len(branch.branches)
    if numBranches > 0:
        # select receiveBranch
        port = sorted(branch.branches.keys())[random.randint(
            0, numBranches - 1)]
        receiveBranch = branch.branches[port]

        # decrease balance
        percent = random.randint(minPercent, maxPercent) / 100.0
        amount = int(branch.balance * percent)
        branch.updateBalance(False, amount)

        #output
        if branch.outputFlag:
            oldName = branchName
            newName = receiveBranch.name
            balance = branch.balance
            print('[**] Transfer %s -> %s (%i) Balance = %i [SENDING]' %
                  (oldName, newName, amount, balance))

        # create transfer message
        transfer = bank_pb2.Transfer()
        transfer.send_branch = branchName
        transfer.amount = amount

        # attach transfer message to BranchMessage
        bm = bank_pb2.BranchMessage()
        bm.transfer.CopyFrom(transfer)

        # send transfer message
        branch.sendMessage(bm, port)

        # add update communication channel
        branch.updateCommChannel(receiveBranch.name, amount)
    else:
        print('[*] No branches to send messages')
        sys.exit(0)
        return
 def send_money(self):
     # print "The number of connections are" + str(len(self.connections))
     while True:
         random_connect = random.choice(self.connections)
         rand_percent = random.uniform(0.01, 0.05)
         self.lock.acquire()
         rand_amount = self.initial_balance * rand_percent    
         if not rand_amount > self.curr_balance:
             self.curr_balance -= int(rand_amount)
             transfer_message = bank_pb2.Transfer()
             transfer_message.money = int(rand_amount)
             print "Sending amount " + str(transfer_message.money)
             transfer_message.branch_name = self.branch_name
             transfer_br_msg = bank_pb2.BranchMessage()
             transfer_br_msg.transfer.CopyFrom(transfer_message)
             random_connect.sendall(transfer_br_msg.SerializeToString())
         self.lock.release()
         sleep(random.randint(1, 5))
Exemplo n.º 8
0
 def send_money(self):
     while True:
         time_to_sleep = random.uniform(0, 5)
         print('Sleeping for: {}'.format(time_to_sleep))
         time.sleep(time_to_sleep)
         socket_index = random.randint(0, len(self.sockets) - 1)
         self.balance_mutex.acquire()
         amount = int((random.uniform(0.01, 0.05) * self.balance))
         self.balance = self.balance - amount
         assert self.balance >= 0
         print('Sending: {}'.format(amount))
         print('Remaining: {}'.format(self.balance))
         transfer = bank_pb2.Transfer()
         transfer.money = amount
         transfer.branch_name = self.name
         message = bank_pb2.BranchMessage()
         message.transfer.MergeFrom(transfer)
         self.sockets[socket_index][1].acquire()
         self.message_socket(self.sockets[socket_index][0], message)
         self.sockets[socket_index][1].release()
         self.balance_mutex.release()