~ better sync.

pull/1/head
Ivan Olexyn 5 years ago
parent bb7f22e4b3
commit 4cb9858907

@ -24,7 +24,7 @@ public class AppMock extends ActorRunnable {
public void run() { public void run() {
while (true) { while (true) {
try { try {
Thread.sleep(Main.REQUEST_SPEED); Thread.sleep(Main.WAIT_SPEED);
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); e.printStackTrace();

@ -20,7 +20,7 @@ public class UserMock extends ActorRunnable {
public void run() { public void run() {
while (true){ while (true){
try { try {
Thread.sleep(Main.REQUEST_SPEED); Thread.sleep(Main.WAIT_SPEED);
sendGetRequest(); sendGetRequest();
} catch (IOException | InterruptedException e) { } catch (IOException | InterruptedException e) {
e.printStackTrace(); e.printStackTrace();
@ -51,7 +51,7 @@ public class UserMock extends ActorRunnable {
ExchangeMock exchange = new ExchangeMock(); ExchangeMock exchange = new ExchangeMock();
exchange.request.setMethod("GET"); exchange.request.setMethod("GET");
exchange.request.setContentType("application/json"); //exchange.request.setContentType("application/json");
String requestBody = "REQUEST-"+(++requestCount); String requestBody = "REQUEST-"+(++requestCount);
String jsonString = "{\"request\":\""+requestBody+ "\"}"; String jsonString = "{\"request\":\""+requestBody+ "\"}";
exchange.request.setContent(jsonString.getBytes()); exchange.request.setContent(jsonString.getBytes());

@ -28,10 +28,10 @@ public class BridgeMock extends BridgeServlet {
@Override @Override
protected void handleGetRequest(HttpServletRequest request, HttpServletResponse response) throws IOException, InterruptedException { protected void handleGetRequest(HttpServletRequest request, HttpServletResponse response) throws IOException, InterruptedException {
RequestMock mockRequest = (RequestMock) request; ExchangeMock exchange;
ExchangeMock exchange = mockRequest.exchange; Ride ride = null;
synchronized (exchange) { synchronized (exchange = ((RequestMock) request).exchange) {
String parsedRequest = IOUtils.toString(request.getReader()); String parsedRequest = IOUtils.toString(request.getReader());
JSONObject obj = new JSONObject(parsedRequest); JSONObject obj = new JSONObject(parsedRequest);
parsedRequest = obj.getString("request"); parsedRequest = obj.getString("request");
@ -39,14 +39,17 @@ public class BridgeMock extends BridgeServlet {
synchronized (rideMap) { synchronized (rideMap) {
// TODO make 3 maps
while (mapHelper.containsLess(1, State.AVAILABLE)) { Thread.sleep(Main.WAIT_SPEED); } while (mapHelper.containsLess(1, State.AVAILABLE)) { Thread.sleep(Main.WAIT_SPEED); }
Ride ride = null;
while (ride == null) { while (ride == null) {
ride = mapHelper.pickAvailable(); ride = mapHelper.pickAvailable();
Thread.sleep(Main.WAIT_SPEED); Thread.sleep(Main.WAIT_SPEED);
} }
ride.setRequest(parsedRequest); ride.setRequest(parsedRequest);
ride.setState(State.BOOKED); ride.setState(State.BOOKED);
@ -64,6 +67,8 @@ public class BridgeMock extends BridgeServlet {
writer.flush(); writer.flush();
writer.close(); writer.close();
rideMap.notify(); rideMap.notify();
} }
exchange.notify(); exchange.notify();
@ -86,16 +91,18 @@ public class BridgeMock extends BridgeServlet {
*/ */
protected void handleGetRideRequestData(HttpServletRequest request, HttpServletResponse response) throws IOException, InterruptedException { protected void handleGetRideRequestData(HttpServletRequest request, HttpServletResponse response) throws IOException, InterruptedException {
RequestMock mockRequest = (RequestMock) request; ExchangeMock exchange;
ExchangeMock exchange = mockRequest.exchange; Ride thisRide;
synchronized (exchange = ((RequestMock) request).exchange) {
synchronized (exchange) {
String jsonPayload = IOUtils.toString(request.getReader()); String jsonPayload = IOUtils.toString(request.getReader());
Ride parsedRide = new Ride(jsonPayload); Ride parsedRide = new Ride(jsonPayload);
synchronized (rideMap) { synchronized (rideMap) {
Ride thisRide = rideMap.get(parsedRide.getID());
synchronized (thisRide = rideMap.get(parsedRide.getID())) {
thisRide.setData(parsedRide.getData()); thisRide.setData(parsedRide.getData());
thisRide.setState(State.LOADED); thisRide.setState(State.LOADED);
@ -105,14 +112,12 @@ public class BridgeMock extends BridgeServlet {
writer.flush(); writer.flush();
writer.close(); writer.close();
rideMap.remove(thisRide.getID());
if (thisRide.getID() == 100000L) { thisRide.notify();
int br = 0;
} }
rideMap.notify(); rideMap.notify();
} }
exchange.notify(); exchange.notify();
//rideMap.remove(thisRide.getID());
} }
} }
@ -125,27 +130,34 @@ public class BridgeMock extends BridgeServlet {
@Override @Override
protected void handlePostRide(HttpServletRequest request, HttpServletResponse response) throws IOException, InterruptedException { protected void handlePostRide(HttpServletRequest request, HttpServletResponse response) throws IOException, InterruptedException {
RequestMock mockRequest = (RequestMock) request; ExchangeMock exchange;
ExchangeMock exchange = mockRequest.exchange; Ride ride;
synchronized (exchange) { synchronized (exchange = ((RequestMock) request).exchange) {
String jsonPayload = IOUtils.toString(request.getReader());
String jsonPayload = IOUtils.toString(request.getReader());
ride = new Ride(jsonPayload);
synchronized (rideMap) { synchronized (rideMap) {
Ride ride = new Ride(jsonPayload);
rideMap.put(ride.getID(), ride.setState(State.AVAILABLE)); rideMap.put(ride.getID(), ride.setState(State.AVAILABLE));
synchronized (ride = rideMap.get(ride.getID())) {
while (ride.getState() == State.AVAILABLE) { while (ride.getState() == State.AVAILABLE) {
rideMap.notify(); rideMap.notify();
Thread.sleep(Main.WAIT_SPEED); Thread.sleep(Main.WAIT_SPEED);
rideMap.wait(); rideMap.wait();
} }
exchange.response.setStatus(200); exchange.response.setStatus(200);
PrintWriter writer = response.getWriter(); PrintWriter writer = response.getWriter();
writer.write(ride.json()); writer.write(ride.json());
writer.flush(); writer.flush();
writer.close(); writer.close();
ride.notify();
}
rideMap.notify(); rideMap.notify();
} }
exchange.notify(); exchange.notify();

@ -6,7 +6,6 @@ import actor.UserMock;
public class Main { public class Main {
final public static int WAIT_SPEED = 10; final public static int WAIT_SPEED = 10;
final public static int REQUEST_SPEED = 1;

@ -15,7 +15,7 @@ import java.util.Collection;
*/ */
public class RequestMock extends MockHttpServletRequest implements HttpServletRequest { public class RequestMock extends MockHttpServletRequest implements HttpServletRequest {
public ExchangeMock exchange; public final ExchangeMock exchange;
public RequestMock(ExchangeMock exchange){ public RequestMock(ExchangeMock exchange){
super(); super();

Loading…
Cancel
Save