+ rework messages.

pull/1/head
Ivan Olexyn 5 years ago
parent 7231b49672
commit f71be79fc7

@ -6,9 +6,10 @@
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; import java.io.BufferedReader;
import javax.servlet.http.HttpServletResponse; import java.io.DataOutputStream;
import java.io.*; import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.URL; import java.net.URL;
import java.util.ArrayList; import java.util.ArrayList;
@ -17,247 +18,180 @@ import java.util.List;
public class ClientServlet extends HttpServlet { 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> availableRides = new ArrayList<>();
public List<Ride> reservedRides = new ArrayList<>(); public List<Ride> reservedRides = new ArrayList<>();
private List<Ride> newRequests = new ArrayList<>(); public List<Ride> pendingRequests = new ArrayList<>();
private List<Ride> forwardedRequests = new ArrayList<>(); public List<Ride> pendingData = new ArrayList<>();
private List<Ride> newData = new ArrayList<>();
private List<Ride> forwardedData = new ArrayList<>();
public ClientServlet() { 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) // Thread : while AvailableRides < 256 , add Ride to AvailableRides , send POST (Ride) [DONE]
new Thread(new PostRideRunnable(this)).start();
// # 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>");
}
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
// Thread : for Rides in ReservedRides, send GET (Ride)
new Thread(new GetRideRunnable(this)).start();
} }
private String make2ColumnRow(String one, String two) {
String sb = "<tr>" + "<td>" + one + "</td>" + "<td>" + two + "</td>" + "</tr>";
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 connection = ConnectionHelper.make("POST", MISP_BRIDGE_URL);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
// By default it is GET request // send POST (Ride)
con.setRequestMethod("GET"); availableRides.add(oldRide);
connection.setDoOutput(true);
//add request header DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
con.setRequestProperty("User-Agent", "USER_AGENT"); outputStream.writeBytes(oldRide.json());
outputStream.flush();
int responseCode = con.getResponseCode(); outputStream.close();
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) { // handle OK (Ride)
response.append(output); // 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 null;
return response.toString();
//printing result from response
} }
Ride sendPostRide(Ride ride) throws IOException, ServletException { /**
* # send GET (Ride)
URL url = new URL(MISP_BRIDGE_URL); * Generated by Loop
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); */
Ride sendGetRide(Ride oldRide) throws IOException {
// 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);
HttpURLConnection connection = ConnectionHelper.make("GET", MISP_BRIDGE_URL);
// send POST // send GET (Ride)
connection.setDoOutput(true); connection.setDoOutput(true);
DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream()); DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
outputStream.writeBytes(ride.json()); outputStream.writeBytes(oldRide.json());
outputStream.flush(); outputStream.flush();
outputStream.close(); outputStream.close();
// handle OK (Ride)(Request)
// read OK // remove Ride from ReservedRides
int responseCode = connection.getResponseCode(); // add Ride to PendingRequests
// send GET (Request)
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); if (connection.getResponseCode() == 200) {
String output; Ride parsedRide = ConnectionHelper.parseRide(connection);
StringBuilder response = new StringBuilder(); if (parsedRide.getRequest() != null) {
reservedRides.remove(oldRide);
while ((output = in.readLine()) != null) { pendingRequests.add(parsedRide);
response.append(output); sendGetRequest(parsedRide);
return parsedRide;
}
} }
in.close(); return null;
// process
availableRides.remove(ride);
reservedRides.add(ride);
return ride;
} }
/**
* # 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"); * # send GET (Ride)(Request)(Data)
connection.setRequestProperty("User-Agent", "USER_AGENT"); */
connection.setRequestProperty("Accept-Language", "en-US,en;q=0.5"); Ride sendGetRideRequestData(Ride oldRide) throws IOException {
connection.setRequestProperty("Content-Type", "application/json");
HttpURLConnection connection = ConnectionHelper.make("GET", MISP_BRIDGE_URL);
// send POST // send GET (Ride)(Request)(Data)
connection.setDoOutput(true); connection.setDoOutput(true);
DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream()); DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
outputStream.writeBytes(ride.json()); outputStream.writeBytes(oldRide.json());
outputStream.flush(); outputStream.flush();
outputStream.close(); outputStream.close();
// handle OK (EOL)
// read OK // remove Ride from PendingData
int responseCode = connection.getResponseCode(); // add Ride to EOl
if (connection.getResponseCode() == 200) {
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); Ride shellIdRide = ConnectionHelper.parseRide(connection);
String output; if (shellIdRide.getRideID() != null) {
StringBuilder response = new StringBuilder(); pendingData.remove(oldRide);
}
while ((output = in.readLine()) != null) {
response.append(output);
} }
in.close(); return null;
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;
} }
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 ClientServlet clientServlet;
int responseCode = connection.getResponseCode();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); public PostRideRunnable(ClientServlet clientServlet) {
String output; this.clientServlet = clientServlet;
StringBuilder response = new StringBuilder(); }
while ((output = in.readLine()) != null) { @Override
response.append(output); 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 public GetRideRunnable(ClientServlet clientServlet) {
// TODO add checks this.clientServlet = clientServlet;
reservedRides.remove(ride);
newRequests.add(ride);
return ride;
} }
@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(); }
}
}
} }

@ -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(); }
}
}
}
}
Loading…
Cancel
Save