-
Notifications
You must be signed in to change notification settings - Fork 1
/
Customer.py
52 lines (39 loc) · 1.54 KB
/
Customer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
from time import sleep
import grpc
from termcolor import colored
import branch_pb2_grpc
from branch_pb2 import MsgRequest
class Customer:
def __init__(self, id, events):
self.id = id
self.events = events
self.recvMsg = list()
self.stub = None
self.clock = 1
# Setup gRPC channel & client stub for branch
def createStub(self):
port = str(50000 + self.id)
channel = grpc.insecure_channel("localhost:" + port)
self.stub = branch_pb2_grpc.BranchStub(channel)
print(colored("Customer #" + str(self.id) + " on branch on :" + port, "blue"))
# Send gRPC request for each event
def executeEvents(self):
for event in self.events:
# Sleep for 'query' events
if event["interface"] == "query":
sleep(0.25)
# Send request to Branch server
response = self.stub.MsgDelivery(
MsgRequest(id=event["id"], interface=event["interface"], money=event["money"], clock=self.clock)
)
# Update local clock
self.clock = max(self.clock, response.clock) + 1
# Create msg to be appended to self.recvMsg list
msg = {"interface": response.interface, "result": response.result}
# Add 'money' entry for 'query' events
if response.interface == "query":
msg["money"] = response.money
self.recvMsg.append(msg)
# Generate output msg
def output(self):
return {"id": self.id, "recv": self.recvMsg}