-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathClientThread.cpp
70 lines (60 loc) · 1.92 KB
/
ClientThread.cpp
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include "ClientThread.h"
#include "Messages.h"
#include <iostream>
ClientThreadClass::ClientThreadClass() {}
void ClientThreadClass::
ThreadBody(std::string ip, int port, int id, int orders, int type) {
customer_id = id;
num_orders = orders;
request_type = type;
if (!stub.Init(ip, port)) {
std::cout << "Thread " << customer_id << " failed to connect" << std::endl;
return;
}
stub.SetRole(0);
if(type == 1) { //1 - regular laptop order request
for (int i = 0; i < num_orders; i++) {
CustomerRequest order;
LaptopInfo laptop;
order.SetOrder(customer_id, i, request_type);
timer.Start();
laptop = stub.OrderLaptop(order);
timer.EndAndMerge();
if (!laptop.IsValid()) {
std::cout << "Invalid laptop " << customer_id << std::endl;
break;
}
}
}
else if (type == 2) { // 2 - customer record read request
// Step 2.a: A customer sends a record read request for its own record
CustomerRequest customerRequest;
customerRequest.SetOrder(customer_id, -1, 2);
timer.Start();
// Step 2.b: The engineer reads the corresponding record from the customer record
CustomerRecord customerRecord = stub.ReadRecord(customerRequest); // Step b
timer.EndAndMerge();
if(customerRecord.IsValid()) {
std::cout<<"Customer " << customerRecord.GetCustomerId() << " last order " << customerRecord.GetLastOrder() << std::endl;
}
else {
std::cout << "Customer "<<customer_id << " does not exist" << std::endl;
}
}
else if (type == 3) {
for(int i=0; i<num_orders; i++) {
CustomerRequest customerRequest;
CustomerRecord customerRecord;
customerRequest.SetOrder(i, -1, 2);
timer.Start();
customerRecord = stub.ReadRecord(customerRequest);
timer.EndAndMerge();
if(customerRecord.IsValid()) {
std::cout<<"CustomerId " << customerRecord.GetCustomerId()<<" LastOrder "<<customerRecord.GetLastOrder()<<std::endl;
}
}
}
}
ClientTimer ClientThreadClass::GetTimer() {
return timer;
}