- misc simplify.

> Ride -> void
 > remove needless states in Client
pull/1/head
Ivan Olexyn 5 years ago
parent 32c444f5c6
commit c7cf89f8a9

@ -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(); }
}
}
}

@ -1,4 +1,6 @@
import org.apache.commons.io.IOUtils;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
@ -115,16 +117,24 @@ public class BridgeMock extends BridgeServlet {
@Override
protected void handlePostRide(HttpServletRequest request, HttpServletResponse response) throws IOException, InterruptedException {
// WIP wait till GET (LINK) arrives.
String jsonPayload = IOUtils.toString(request.getReader());
Ride ride = new Ride(jsonPayload);
availableRides.add(ride);
// WIP force surrender lock on ride
int i = availableRides.indexOf(ride);
availableRides.get(i).notify();
// WIP wait to receive lock back
availableRides.get(i).wait();
synchronized (ride){
while (availableRides.contains(ride)){
ride.notify();
Thread.sleep(100);
ride.wait();
}
// SUPER ILLEGAL MOCKING
response.setStatus(200);
PrintWriter writer = response.getWriter();
writer.print(ride.json());
}
// # send OK (Ride) to mispclient
}

@ -2,11 +2,7 @@ import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* Wraps a ClientServlet so it can be debugged easily, i.e. without running Tomcat.
@ -22,7 +18,7 @@ public class ClientMock extends ClientServlet {
}
@Override
Ride sendPostRide(Ride oldRide) throws IOException, ServletException {
void sendPostRide(Ride oldRide) throws IOException, ServletException {
// SUPER ILLEGAL MOCKING
MockHttpServletRequest request = new MockHttpServletRequest();
@ -34,8 +30,6 @@ public class ClientMock extends ClientServlet {
MockHttpServletResponse response = new MockHttpServletResponse();
availableRides.add(oldRide);
mockSet.bridgeMock.doPost(request,response);
// END
return null;
}

Loading…
Cancel
Save