-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathOrderCancellationService.java
137 lines (99 loc) · 4.17 KB
/
OrderCancellationService.java
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
129
130
131
132
133
134
135
136
137
import com.google.gson.Gson;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class OrderCancellationService {
public static void main(String[] args) throws Exception {
// server is listening on port 5050
int port = 5055;
if (args.length > 0) {
port = Integer.parseInt(args[0]);
}
ServerSocket ss = new ServerSocket(port);
// running infinite loop for getting
// client request
System.out.println("Starting UserAuthentication service at port = " + port);
boolean result = register("localhost", 5000, "localhost", port); // Register with the Registry, so the client know how to find!
if (!result) {
System.out.println("Register unsuccessfully!");
ss.close();
return;
}
int nClients = 0;
while (true)
{
Socket s = null;
// socket object to receive incoming client requests
s = ss.accept();
nClients++;
System.out.println("A new client is connected : " + s + " client number: " + nClients);
serve(s, nClients);
}
}
private static void serve(Socket socket, int clientID) throws Exception {
DataInputStream reader = new DataInputStream(socket.getInputStream());
String msg = reader.readUTF();
Gson gson = new Gson();
User user = gson.fromJson(msg, User.class);
//System.out.println("OrderID from client " + clientID + ": " + id);
Class.forName("org.sqlite.JDBC");
DataAccess adapter = new SQLiteDataAdapter();
adapter.connect("jdbc:sqlite:store.db");
User retrievedUser = adapter.authenticateUser(user);
if (retrievedUser != null) {
System.out.println("\'" + retrievedUser.userName + "\'" + " has been authenticated!");
} else {
System.out.println("The requested user does not appear in the database.");
}
String ans = gson.toJson(retrievedUser);
DataOutputStream printer = new DataOutputStream(socket.getOutputStream());
printer.writeUTF(ans);
printer.flush();
String orderCancellation = reader.readUTF();
Order cancelledOrder = gson.fromJson(orderCancellation, Order.class);
cancelledOrder = adapter.loadOrder(cancelledOrder.getOrderID());
if (retrievedUser.userName.equals(cancelledOrder.getCustomerName())) {
adapter.cancelOrder(cancelledOrder);
orderCancellation = gson.toJson(cancelledOrder);
printer.writeUTF(orderCancellation);
printer.flush();
} else {
System.out.println("User does not have the privileges to cancel this order.");
}
printer.close();
reader.close();
socket.close();
}
/*
Register this service to the Registry!
*/
private static boolean register(String regHost, int regPort, String myHost, int myPort) throws IOException {
ServiceInfoModel info = new ServiceInfoModel();
info.serviceCode = ServiceInfoModel.ORDER_CANCELLATION_SERVICE;
info.serviceHostAddress = myHost;
info.serviceHostPort = myPort;
Gson gson = new Gson();
ServiceMessageModel req = new ServiceMessageModel();
req.code = ServiceMessageModel.SERVICE_PUBLISH_REQUEST;
req.data = gson.toJson(info);
Socket socket = new Socket(regHost, regPort);
DataOutputStream printer = new DataOutputStream(socket.getOutputStream());
printer.writeUTF(gson.toJson(req));
printer.flush();
DataInputStream reader = new DataInputStream(socket.getInputStream());
String msg = reader.readUTF();
printer.close();
reader.close();
socket.close();
System.out.println("Message from server: " + msg);
ServiceMessageModel res = gson.fromJson(msg, ServiceMessageModel.class);
if (res.code == ServiceMessageModel.SERVICE_PUBLISH_OK)
return true;
else
return false;
}
private static void deregister() {
}
}