-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathclient.cpp
More file actions
128 lines (113 loc) · 3.11 KB
/
client.cpp
File metadata and controls
128 lines (113 loc) · 3.11 KB
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include "src/sockets/Tcp.h"
#include "Driver.h"
#include "Point.h"
#include "Serialization.h"
#include "Recieve.h"
using namespace std;
//make a driver.
Driver* makeDriver();
//Decide what to do.
void whatToDo(string task, Tcp* tcp, Driver* driver);
//Tke care if trip done.
bool takeCareIfTripDone(Driver* driver, Tcp* udp);
//main for the client.
int main(int argc, char *argv[]) {
Driver* d = Recieve::recieveDriver();
//check if the driver was legal.
if (d == NULL) {
return 0;
}
//std::cout << "Hello, from client" << std::endl;
Tcp* tcp = new Tcp(0, atoi(argv[2]));
tcp->setIp_address(argv[1]);
tcp->initialize();
sendTo<int>(d->getId(), tcp);
char buffer[1024];
string str("!close");
while (str != "close") {
str.assign(receive<string>(1, tcp));
whatToDo(str, tcp, d);
}
if (tcp != NULL) {
delete (tcp);
}
if (d != NULL) {
d->deletePathFromClient();
delete (d);
}
return 0;
}
//make a driver.
Driver* makeDriver() {
int driver_id, age, xp, vehicle_id;
char dummy;
char status;
Point p = Point(0,0);
// getting details.
cin >> driver_id >> dummy >> age >> dummy >> status >> dummy
>> xp >> dummy >> vehicle_id;
Driver *driver = new Driver(driver_id, age, status, xp,
vehicle_id);
return driver;
}
//Decide what to do.
void whatToDo(string task, Tcp* tcp, Driver* driver) {
switch (task.c_str()[0]) {
case 'L':
case 'l':{
sendTo<Node>(driver->getLocation(), tcp);
break;
}
//for Trip
case 'R':
case 'r': {
sendTo<string>("success", tcp);
Trip* trip;
//receive(tcp) >> trip;
trip = receive<Trip>(tcp);
driver->setTrip(trip);
sendTo<string>("success", tcp);
break;
}
case 'M':
case 'm': {
driver->moveOneStep();
if (!takeCareIfTripDone(driver, tcp)) {
//If standard taxi:
if (driver->getTaxi()->getSpeed() == 1) {
sendTo<string>("Not done trip", tcp);
}
else {//Luxury taxi.
driver->moveOneStep();
if (!takeCareIfTripDone(driver, tcp)) {
sendTo<string>("Not done trip", tcp);
}
}
}
break;
}
case 'T':
case 't':{
sendTo<string>("success", tcp);
Taxi* taxi;
//receive(tcp) >> taxi;
taxi = receive<Taxi>(tcp);
driver->setTaxi(taxi);
sendTo<string>("success", tcp);
break;
}
default: {
break;
}
}
}
//Tke care if trip done.
bool takeCareIfTripDone(Driver* driver, Tcp* udp) {
if (driver->getTrip()->getPath().size() == 1) {
sendTo<string>("Done trip", udp);
//driver->getTrip()->deletePathFromClient();
driver->deletePathFromClient();
return true;
}
return false;
}