+ 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);
}
// 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) // handle OK (Ride)
// remove Ride from AvailableRides // remove Ride from AvailableRides
// add Ride to ReservedRides // add Ride to ReservedRides
if (connection.getResponseCode() == 200) {
// handle OK (Ride)(Request) Ride parsedRide = ConnectionHelper.parseRide(connection);
// remove Ride from AvailableRides if (parsedRide.equals(oldRide)) {
// add Request to NewRequest availableRides.remove(oldRide);
// send GET (Request) reservedRides.add(parsedRide);
// remove Ride from NewRequest return parsedRide;
// 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>");
} }
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
} }
return null;
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 GET (Ride)
* Generated by Loop
URL url = new URL(MISP_BRIDGE_URL); */
HttpURLConnection con = (HttpURLConnection) url.openConnection(); Ride sendGetRide(Ride oldRide) throws IOException {
// 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
}
Ride sendPostRide(Ride ride) throws IOException, ServletException { HttpURLConnection connection = ConnectionHelper.make("GET", MISP_BRIDGE_URL);
URL url = new URL(MISP_BRIDGE_URL); // send GET (Ride)
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
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 {
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); // handle OK (Data)
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // 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); 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();
// 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())); ClientServlet clientServlet;
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null) { public PostRideRunnable(ClientServlet clientServlet) {
response.append(output); 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 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