diff --git a/mispclient/src/ClientServlet.java b/mispclient/src/ClientServlet.java index 8c91b95..c7f40fb 100644 --- a/mispclient/src/ClientServlet.java +++ b/mispclient/src/ClientServlet.java @@ -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 availableRides = new ArrayList<>(); public List reservedRides = new ArrayList<>(); - private List newRequests = new ArrayList<>(); - private List forwardedRequests = new ArrayList<>(); - private List newData = new ArrayList<>(); - private List forwardedData = new ArrayList<>(); + public List pendingRequests = new ArrayList<>(); + public List pendingData = new ArrayList<>(); public ClientServlet() { - new DoClientThings().start(this); - } - - - - - - - - - - - - - - // 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("MispClient"); - writer.println(""); - } - - @Override - public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { + // 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(); } - private String make2ColumnRow(String one, String two) { - String sb = "" + "" + one + "" + "" + two + "" + ""; - return sb; - } - - - private String sendGet() throws IOException { + /** + * # send POST (Ride) + * Generated by Loop + */ + Ride sendPostRide(Ride oldRide) throws IOException, ServletException { - URL url = new URL(MISP_BRIDGE_URL); - HttpURLConnection con = (HttpURLConnection) url.openConnection(); + HttpURLConnection connection = ConnectionHelper.make("POST", MISP_BRIDGE_URL); - // 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(); + // send POST (Ride) + availableRides.add(oldRide); + connection.setDoOutput(true); + DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream()); + outputStream.writeBytes(oldRide.json()); + outputStream.flush(); + outputStream.close(); - while ((output = in.readLine()) != null) { - response.append(output); + // handle OK (Ride) + // remove Ride from AvailableRides + // add Ride to ReservedRides + if (connection.getResponseCode() == 200) { + Ride parsedRide = ConnectionHelper.parseRide(connection); + if (parsedRide.equals(oldRide)) { + availableRides.remove(oldRide); + reservedRides.add(parsedRide); + return parsedRide; + } } - in.close(); - - - return response.toString(); - //printing result from response - - + return null; } - Ride sendPostRide(Ride ride) throws IOException, ServletException { - - 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 GET (Ride) + * Generated by Loop + */ + Ride sendGetRide(Ride oldRide) throws IOException { + HttpURLConnection connection = ConnectionHelper.make("GET", MISP_BRIDGE_URL); - // 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 { + + // send FOO + // TODO make sure as many as possible tyes of requests can be forwarded. + + // 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; + } - Ride sendGetRide(Ride ride) throws IOException { - - URL url = new URL(MISP_BRIDGE_URL); - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - // 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 { + HttpURLConnection connection = ConnectionHelper.make("GET", MISP_BRIDGE_URL); - // send POST + // 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(); +/** + * While AvailableRides < 256 , + * add Ride to AvailableRides , + * send POST (Ride). + */ +class PostRideRunnable implements Runnable { - // read OK - int responseCode = connection.getResponseCode(); + ClientServlet clientServlet; - BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); - String output; - StringBuilder response = new StringBuilder(); + public PostRideRunnable(ClientServlet clientServlet) { + this.clientServlet = clientServlet; + } - while ((output = in.readLine()) != null) { - response.append(output); + @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(); } } - in.close(); - + } +} - 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(); } + } + } +} \ No newline at end of file diff --git a/mispclient/src/DoClientThings.java b/mispclient/src/DoClientThings.java deleted file mode 100644 index 6a67422..0000000 --- a/mispclient/src/DoClientThings.java +++ /dev/null @@ -1,71 +0,0 @@ -import javax.servlet.ServletException; -import java.io.IOException; - -public class DoClientThings { - - - public void start(ClientServlet clientServlet) { - // Thread 1 - // while AvailableRides < 256 , add Ride to AvailableRides , send POST (Ride) [DONE] - Runnable postRideRunnable = new PostRideRunnable(clientServlet); - Thread postRideThread = new Thread(postRideRunnable); - postRideThread.start(); - - // Thread 2 - // for Rides in ReservedRides, send GET (Ride) [DONE] - Runnable getRideRunnable = new GetRideRunnable(clientServlet); - Thread getRideThread = new Thread(getRideRunnable); - getRideThread.start(); - } - - - /** - * While AvailableRides < 256 , - * add Ride to AvailableRides , - * send POST (Ride). - */ - private class PostRideRunnable implements Runnable { - - ClientServlet clientServlet; - - public PostRideRunnable(ClientServlet clientServlet) { - this.clientServlet = clientServlet; - } - - @Override - public void run() { - while (true) { - if (clientServlet.availableRides.size() < 256) { - try {clientServlet.sendPostRide(new Ride());} catch (IOException | ServletException e) { e.printStackTrace(); } - } - try {Thread.sleep(500);} catch (InterruptedException e) { e.printStackTrace(); } - } - } - } - - - /** - * For Rides in ReservedRides, - * send GET (Ride). - */ - private 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(); } - } - } - } - -} - -