|
|
|
@ -6,12 +6,9 @@
|
|
|
|
|
|
|
|
|
|
import javax.servlet.ServletException;
|
|
|
|
|
import javax.servlet.http.HttpServlet;
|
|
|
|
|
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;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
|
@ -19,19 +16,18 @@ import java.util.List;
|
|
|
|
|
public class ClientServlet extends HttpServlet {
|
|
|
|
|
|
|
|
|
|
protected static final String MISP_BRIDGE_URL = "http://localhost:9090/mispbridge/core";
|
|
|
|
|
public static final int AVAILABLE_RIDES_OVERHEAD = 1;
|
|
|
|
|
|
|
|
|
|
public List<Ride> availableRides = new ArrayList<>();
|
|
|
|
|
public List<Ride> reservedRides = new ArrayList<>();
|
|
|
|
|
public List<Ride> pendingRequests = new ArrayList<>();
|
|
|
|
|
public List<Ride> pendingData = new ArrayList<>();
|
|
|
|
|
public List<Ride> bookedRides = new ArrayList<>();
|
|
|
|
|
public List<Ride> loadedRides = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
public ClientServlet() {
|
|
|
|
|
|
|
|
|
|
// 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();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -39,7 +35,7 @@ public class ClientServlet extends HttpServlet {
|
|
|
|
|
* # send POST (Ride)
|
|
|
|
|
* Generated by Loop
|
|
|
|
|
*/
|
|
|
|
|
Ride sendPostRide(Ride oldRide) throws IOException, ServletException {
|
|
|
|
|
void sendPostRide(Ride oldRide) throws IOException, ServletException {
|
|
|
|
|
|
|
|
|
|
HttpURLConnection connection = ConnectionHelper.make("POST", MISP_BRIDGE_URL);
|
|
|
|
|
|
|
|
|
@ -58,44 +54,12 @@ public class ClientServlet extends HttpServlet {
|
|
|
|
|
Ride parsedRide = ConnectionHelper.parseRide(connection);
|
|
|
|
|
if (parsedRide.equals(oldRide)) {
|
|
|
|
|
availableRides.remove(oldRide);
|
|
|
|
|
reservedRides.add(parsedRide);
|
|
|
|
|
return parsedRide;
|
|
|
|
|
bookedRides.add(parsedRide);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* # send GET (Ride)
|
|
|
|
|
* Generated by Loop
|
|
|
|
|
*/
|
|
|
|
|
Ride sendGetRide(Ride oldRide) throws IOException {
|
|
|
|
|
|
|
|
|
|
HttpURLConnection connection = ConnectionHelper.make("GET", MISP_BRIDGE_URL);
|
|
|
|
|
|
|
|
|
|
// send GET (Ride)
|
|
|
|
|
connection.setDoOutput(true);
|
|
|
|
|
DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
|
|
|
|
|
outputStream.writeBytes(oldRide.json());
|
|
|
|
|
outputStream.flush();
|
|
|
|
|
outputStream.close();
|
|
|
|
|
|
|
|
|
|
// 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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* # send GET (Request) to App
|
|
|
|
@ -110,10 +74,10 @@ public class ClientServlet extends HttpServlet {
|
|
|
|
|
// add Ride to PendingData
|
|
|
|
|
// send GET (Ride)(Data)
|
|
|
|
|
String data = "DATA";
|
|
|
|
|
pendingRequests.remove(oldRide);
|
|
|
|
|
bookedRides.remove(oldRide);
|
|
|
|
|
Ride newRide = oldRide;
|
|
|
|
|
newRide.setData(data);
|
|
|
|
|
pendingData.add(newRide);
|
|
|
|
|
loadedRides.add(newRide);
|
|
|
|
|
sendGetRideRequestData(newRide);
|
|
|
|
|
return newRide;
|
|
|
|
|
}
|
|
|
|
@ -139,7 +103,7 @@ public class ClientServlet extends HttpServlet {
|
|
|
|
|
if (connection.getResponseCode() == 200) {
|
|
|
|
|
Ride shellIdRide = ConnectionHelper.parseRide(connection);
|
|
|
|
|
if (shellIdRide.getRideID() != null) {
|
|
|
|
|
pendingData.remove(oldRide);
|
|
|
|
|
loadedRides.remove(oldRide);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
@ -165,7 +129,7 @@ class PostRideRunnable implements Runnable {
|
|
|
|
|
@Override
|
|
|
|
|
public void run() {
|
|
|
|
|
while (true) {
|
|
|
|
|
if (clientServlet.availableRides.size() < 1) {
|
|
|
|
|
if (clientServlet.availableRides.size() < ClientServlet.AVAILABLE_RIDES_OVERHEAD) {
|
|
|
|
|
try {clientServlet.sendPostRide(new Ride());} catch (IOException | ServletException e) { e.printStackTrace(); }
|
|
|
|
|
}
|
|
|
|
|
try {Thread.sleep(500);} catch (InterruptedException e) { e.printStackTrace(); }
|
|
|
|
@ -174,24 +138,3 @@ class PostRideRunnable implements Runnable {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* For Rides in ReservedRides,
|
|
|
|
|
* send GET (Ride).
|
|
|
|
|
*/
|
|
|
|
|
class GetRideRunnable implements Runnable {
|
|
|
|
|
ClientServlet clientServlet;
|
|
|
|
|
|
|
|
|
|
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(); }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|