-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProductQuantityUpdateService.java
More file actions
132 lines (94 loc) · 3.77 KB
/
ProductQuantityUpdateService.java
File metadata and controls
132 lines (94 loc) · 3.77 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
129
130
131
132
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 ProductQuantityUpdateService {
public static void main(String[] args) throws Exception {
// server is listening on port 5050
int port = 5053;
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 ProductQuantityUpdate 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();
int id = Integer.parseInt(msg);
System.out.println("ProductID from client " + clientID + ": " + id);
Class.forName("org.sqlite.JDBC");
DataAccess adapter = new SQLiteDataAdapter();
adapter.connect("jdbc:sqlite:store.db");
ProductModel model = adapter.loadProduct(id);
if (model != null) {
System.out.println(model.name);
} else {
System.out.println("ProductID cannot be found!");
}
Gson gson = new Gson();
String ans = gson.toJson(model);
DataOutputStream printer = new DataOutputStream(socket.getOutputStream());
printer.writeUTF(ans);
printer.flush();
String updatedMsg = reader.readUTF();
ProductModel updatedModel = gson.fromJson(updatedMsg, ProductModel.class);
adapter.saveProduct(updatedModel);
updatedMsg = gson.toJson(updatedModel);
printer.writeUTF(updatedMsg);
printer.flush();
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.PRODUCT_QUANTITY_UPDATE_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() {
}
}