|
|
|
@ -6,9 +6,10 @@
|
|
|
|
|
|
|
|
|
|
import javax.servlet.ServletException;
|
|
|
|
|
import javax.servlet.http.HttpServlet;
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
import java.io.*;
|
|
|
|
|
import java.io.BufferedReader;
|
|
|
|
|
import java.io.DataOutputStream;
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
import java.io.InputStreamReader;
|
|
|
|
|
import java.net.HttpURLConnection;
|
|
|
|
|
import java.net.URL;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
@ -17,247 +18,180 @@ import java.util.List;
|
|
|
|
|
|
|
|
|
|
public class ClientServlet extends HttpServlet {
|
|
|
|
|
|
|
|
|
|
private static final String MISP_BRIDGE_URL = "http://localhost:9090/mispbridge/core";
|
|
|
|
|
protected static final String MISP_BRIDGE_URL = "http://localhost:9090/mispbridge/core";
|
|
|
|
|
|
|
|
|
|
public List<Ride> availableRides = new ArrayList<>();
|
|
|
|
|
public List<Ride> reservedRides = new ArrayList<>();
|
|
|
|
|
private List<Ride> newRequests = new ArrayList<>();
|
|
|
|
|
private List<Ride> forwardedRequests = new ArrayList<>();
|
|
|
|
|
private List<Ride> newData = new ArrayList<>();
|
|
|
|
|
private List<Ride> forwardedData = new ArrayList<>();
|
|
|
|
|
public List<Ride> pendingRequests = new ArrayList<>();
|
|
|
|
|
public List<Ride> pendingData = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
public ClientServlet() {
|
|
|
|
|
new DoClientThings().start(this);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Thread : while AvailableRides < 256 , add Ride to AvailableRides , send POST (Ride) [DONE]
|
|
|
|
|
new Thread(new PostRideRunnable(this)).start();
|
|
|
|
|
|
|
|
|
|
// Thread : for Rides in ReservedRides, send GET (Ride)
|
|
|
|
|
new Thread(new GetRideRunnable(this)).start();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* # send POST (Ride)
|
|
|
|
|
* Generated by Loop
|
|
|
|
|
*/
|
|
|
|
|
Ride sendPostRide(Ride oldRide) throws IOException, ServletException {
|
|
|
|
|
|
|
|
|
|
HttpURLConnection connection = ConnectionHelper.make("POST", MISP_BRIDGE_URL);
|
|
|
|
|
|
|
|
|
|
// send POST (Ride)
|
|
|
|
|
availableRides.add(oldRide);
|
|
|
|
|
connection.setDoOutput(true);
|
|
|
|
|
DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
|
|
|
|
|
outputStream.writeBytes(oldRide.json());
|
|
|
|
|
outputStream.flush();
|
|
|
|
|
outputStream.close();
|
|
|
|
|
|
|
|
|
|
// handle OK (Ride)
|
|
|
|
|
// remove Ride from AvailableRides
|
|
|
|
|
// add Ride to ReservedRides
|
|
|
|
|
|
|
|
|
|
// handle OK (Ride)(Request)
|
|
|
|
|
// remove Ride from AvailableRides
|
|
|
|
|
// add Request to NewRequest
|
|
|
|
|
// send GET (Request)
|
|
|
|
|
// remove Ride from NewRequest
|
|
|
|
|
// add Ride to ForwardedRequest
|
|
|
|
|
|
|
|
|
|
// handle OK (Data)
|
|
|
|
|
// remove Ride from ForwardedRequest
|
|
|
|
|
// add Ride to NewData
|
|
|
|
|
// send GET (Ride)(Data)
|
|
|
|
|
// remove Ride from NewData
|
|
|
|
|
// add Ride to ForwardedData
|
|
|
|
|
|
|
|
|
|
// handle OK (EOL)
|
|
|
|
|
// remove Ride from ForwardedData
|
|
|
|
|
// add Ride to EOl
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// # send POST (Ride)
|
|
|
|
|
|
|
|
|
|
// # send GET (Ride)
|
|
|
|
|
|
|
|
|
|
// # send GET (Request)
|
|
|
|
|
|
|
|
|
|
// # send GET (Ride)(Data)
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
|
|
|
|
|
response.setContentType("text/html");
|
|
|
|
|
PrintWriter writer = response.getWriter();
|
|
|
|
|
writer.println("<html><head><title>MispClient</title></head><body bgcolor=white>");
|
|
|
|
|
writer.println("</body></html>");
|
|
|
|
|
if (connection.getResponseCode() == 200) {
|
|
|
|
|
Ride parsedRide = ConnectionHelper.parseRide(connection);
|
|
|
|
|
if (parsedRide.equals(oldRide)) {
|
|
|
|
|
availableRides.remove(oldRide);
|
|
|
|
|
reservedRides.add(parsedRide);
|
|
|
|
|
return parsedRide;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private String make2ColumnRow(String one, String two) {
|
|
|
|
|
String sb = "<tr>" + "<td>" + one + "</td>" + "<td>" + two + "</td>" + "</tr>";
|
|
|
|
|
return sb;
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private String sendGet() throws IOException {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
URL url = new URL(MISP_BRIDGE_URL);
|
|
|
|
|
HttpURLConnection con = (HttpURLConnection) url.openConnection();
|
|
|
|
|
|
|
|
|
|
// By default it is GET request
|
|
|
|
|
con.setRequestMethod("GET");
|
|
|
|
|
|
|
|
|
|
//add request header
|
|
|
|
|
con.setRequestProperty("User-Agent", "USER_AGENT");
|
|
|
|
|
|
|
|
|
|
int responseCode = con.getResponseCode();
|
|
|
|
|
System.out.println("Sending get request : " + url);
|
|
|
|
|
System.out.println("Response code : " + responseCode);
|
|
|
|
|
|
|
|
|
|
// Reading response from input Stream
|
|
|
|
|
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
|
|
|
|
|
String output;
|
|
|
|
|
StringBuffer response = new StringBuffer();
|
|
|
|
|
|
|
|
|
|
while ((output = in.readLine()) != null) {
|
|
|
|
|
response.append(output);
|
|
|
|
|
}
|
|
|
|
|
in.close();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return response.toString();
|
|
|
|
|
//printing result from response
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* # send GET (Ride)
|
|
|
|
|
* Generated by Loop
|
|
|
|
|
*/
|
|
|
|
|
Ride sendGetRide(Ride oldRide) throws IOException {
|
|
|
|
|
|
|
|
|
|
Ride sendPostRide(Ride ride) throws IOException, ServletException {
|
|
|
|
|
HttpURLConnection connection = ConnectionHelper.make("GET", MISP_BRIDGE_URL);
|
|
|
|
|
|
|
|
|
|
URL url = new URL(MISP_BRIDGE_URL);
|
|
|
|
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
|
|
|
|
|
|
|
|
|
// prepare
|
|
|
|
|
connection.setRequestMethod("POST");
|
|
|
|
|
connection.setRequestProperty("User-Agent", "USER_AGENT");
|
|
|
|
|
connection.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
|
|
|
|
|
connection.setRequestProperty("Content-Type", "application/json");
|
|
|
|
|
|
|
|
|
|
availableRides.add(ride);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// send POST
|
|
|
|
|
// send GET (Ride)
|
|
|
|
|
connection.setDoOutput(true);
|
|
|
|
|
DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
|
|
|
|
|
outputStream.writeBytes(ride.json());
|
|
|
|
|
outputStream.writeBytes(oldRide.json());
|
|
|
|
|
outputStream.flush();
|
|
|
|
|
outputStream.close();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// read OK
|
|
|
|
|
int responseCode = connection.getResponseCode();
|
|
|
|
|
|
|
|
|
|
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
|
|
|
|
|
String output;
|
|
|
|
|
StringBuilder response = new StringBuilder();
|
|
|
|
|
|
|
|
|
|
while ((output = in.readLine()) != null) {
|
|
|
|
|
response.append(output);
|
|
|
|
|
// handle OK (Ride)(Request)
|
|
|
|
|
// remove Ride from ReservedRides
|
|
|
|
|
// add Ride to PendingRequests
|
|
|
|
|
// send GET (Request)
|
|
|
|
|
if (connection.getResponseCode() == 200) {
|
|
|
|
|
Ride parsedRide = ConnectionHelper.parseRide(connection);
|
|
|
|
|
if (parsedRide.getRequest() != null) {
|
|
|
|
|
reservedRides.remove(oldRide);
|
|
|
|
|
pendingRequests.add(parsedRide);
|
|
|
|
|
sendGetRequest(parsedRide);
|
|
|
|
|
return parsedRide;
|
|
|
|
|
}
|
|
|
|
|
in.close();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// process
|
|
|
|
|
availableRides.remove(ride);
|
|
|
|
|
reservedRides.add(ride);
|
|
|
|
|
return ride;
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* # send GET (Request) to App
|
|
|
|
|
*/
|
|
|
|
|
Ride sendGetRequest(Ride oldRide) throws IOException {
|
|
|
|
|
|
|
|
|
|
Ride sendGetRide(Ride ride) throws IOException {
|
|
|
|
|
// send FOO
|
|
|
|
|
// TODO make sure as many as possible tyes of requests can be forwarded.
|
|
|
|
|
|
|
|
|
|
URL url = new URL(MISP_BRIDGE_URL);
|
|
|
|
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
|
|
|
|
// handle OK (Data)
|
|
|
|
|
// remove Ride from PendingRequests
|
|
|
|
|
// add Ride to PendingData
|
|
|
|
|
// send GET (Ride)(Data)
|
|
|
|
|
String data = "DATA";
|
|
|
|
|
pendingRequests.remove(oldRide);
|
|
|
|
|
Ride newRide = oldRide;
|
|
|
|
|
newRide.setData(data);
|
|
|
|
|
pendingData.add(newRide);
|
|
|
|
|
sendGetRideRequestData(newRide);
|
|
|
|
|
return newRide;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// prepare
|
|
|
|
|
connection.setRequestMethod("GET");
|
|
|
|
|
connection.setRequestProperty("User-Agent", "USER_AGENT");
|
|
|
|
|
connection.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
|
|
|
|
|
connection.setRequestProperty("Content-Type", "application/json");
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* # send GET (Ride)(Request)(Data)
|
|
|
|
|
*/
|
|
|
|
|
Ride sendGetRideRequestData(Ride oldRide) throws IOException {
|
|
|
|
|
|
|
|
|
|
// send POST
|
|
|
|
|
HttpURLConnection connection = ConnectionHelper.make("GET", MISP_BRIDGE_URL);
|
|
|
|
|
|
|
|
|
|
// send GET (Ride)(Request)(Data)
|
|
|
|
|
connection.setDoOutput(true);
|
|
|
|
|
DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
|
|
|
|
|
outputStream.writeBytes(ride.json());
|
|
|
|
|
outputStream.writeBytes(oldRide.json());
|
|
|
|
|
outputStream.flush();
|
|
|
|
|
outputStream.close();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// read OK
|
|
|
|
|
int responseCode = connection.getResponseCode();
|
|
|
|
|
|
|
|
|
|
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
|
|
|
|
|
String output;
|
|
|
|
|
StringBuilder response = new StringBuilder();
|
|
|
|
|
|
|
|
|
|
while ((output = in.readLine()) != null) {
|
|
|
|
|
response.append(output);
|
|
|
|
|
// handle OK (EOL)
|
|
|
|
|
// remove Ride from PendingData
|
|
|
|
|
// add Ride to EOl
|
|
|
|
|
if (connection.getResponseCode() == 200) {
|
|
|
|
|
Ride shellIdRide = ConnectionHelper.parseRide(connection);
|
|
|
|
|
if (shellIdRide.getRideID() != null) {
|
|
|
|
|
pendingData.remove(oldRide);
|
|
|
|
|
}
|
|
|
|
|
in.close();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ride rideRequest = new Ride(response.toString());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// process
|
|
|
|
|
// TODO add checks
|
|
|
|
|
reservedRides.remove(ride);
|
|
|
|
|
newRequests.add(rideRequest);
|
|
|
|
|
sendGetRequest(rideRequest.getRequest());
|
|
|
|
|
newRequests.remove(rideRequest);
|
|
|
|
|
forwardedRequests.add(rideRequest);
|
|
|
|
|
|
|
|
|
|
return ride;
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Ride sendGetRequest(String request) throws IOException {
|
|
|
|
|
|
|
|
|
|
URL url = new URL(MISP_BRIDGE_URL);
|
|
|
|
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
|
|
|
|
|
|
|
|
|
// prepare
|
|
|
|
|
connection.setRequestMethod("GET");
|
|
|
|
|
connection.setRequestProperty("Content-Type", "application/json");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// TODO replace
|
|
|
|
|
Ride ride = new Ride();
|
|
|
|
|
|
|
|
|
|
// send POST
|
|
|
|
|
connection.setDoOutput(true);
|
|
|
|
|
DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
|
|
|
|
|
outputStream.writeBytes(ride.json());
|
|
|
|
|
outputStream.flush();
|
|
|
|
|
outputStream.close();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// read OK
|
|
|
|
|
int responseCode = connection.getResponseCode();
|
|
|
|
|
/**
|
|
|
|
|
* While AvailableRides < 256 ,
|
|
|
|
|
* add Ride to AvailableRides ,
|
|
|
|
|
* send POST (Ride).
|
|
|
|
|
*/
|
|
|
|
|
class PostRideRunnable implements Runnable {
|
|
|
|
|
|
|
|
|
|
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
|
|
|
|
|
String output;
|
|
|
|
|
StringBuilder response = new StringBuilder();
|
|
|
|
|
ClientServlet clientServlet;
|
|
|
|
|
|
|
|
|
|
while ((output = in.readLine()) != null) {
|
|
|
|
|
response.append(output);
|
|
|
|
|
public PostRideRunnable(ClientServlet clientServlet) {
|
|
|
|
|
this.clientServlet = clientServlet;
|
|
|
|
|
}
|
|
|
|
|
in.close();
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void run() {
|
|
|
|
|
while (true) {
|
|
|
|
|
if (clientServlet.availableRides.size() < 1) {
|
|
|
|
|
try {clientServlet.sendPostRide(new Ride());} catch (IOException | ServletException e) { e.printStackTrace(); }
|
|
|
|
|
}
|
|
|
|
|
try {Thread.sleep(500);} catch (InterruptedException e) { e.printStackTrace(); }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Ride rideRequest = new Ride(response.toString());
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* For Rides in ReservedRides,
|
|
|
|
|
* send GET (Ride).
|
|
|
|
|
*/
|
|
|
|
|
class GetRideRunnable implements Runnable {
|
|
|
|
|
ClientServlet clientServlet;
|
|
|
|
|
|
|
|
|
|
// process
|
|
|
|
|
// TODO add checks
|
|
|
|
|
reservedRides.remove(ride);
|
|
|
|
|
newRequests.add(ride);
|
|
|
|
|
return ride;
|
|
|
|
|
public GetRideRunnable(ClientServlet clientServlet) {
|
|
|
|
|
this.clientServlet = clientServlet;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void run() {
|
|
|
|
|
while (true) {
|
|
|
|
|
for (Ride reservedRide : clientServlet.reservedRides) {
|
|
|
|
|
try {clientServlet.sendGetRide(reservedRide);} catch (IOException e) { e.printStackTrace(); }
|
|
|
|
|
}
|
|
|
|
|
try {Thread.sleep(500);} catch (InterruptedException e) { e.printStackTrace(); }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|