diff --git a/embedded/src/main/java/com/olexyn/misp/embedded/RunAll.java b/embedded/src/main/java/com/olexyn/misp/embedded/RunAll.java index 7e0b081..0946d20 100644 --- a/embedded/src/main/java/com/olexyn/misp/embedded/RunAll.java +++ b/embedded/src/main/java/com/olexyn/misp/embedded/RunAll.java @@ -1,6 +1,6 @@ package com.olexyn.misp.embedded; -import com.olexyn.misp.reverse.ReverseApp; +import com.olexyn.misp.reverse.Reverse; public class RunAll { @@ -12,7 +12,7 @@ public class RunAll { Thread.sleep(2000); - Thread reverseT = new Thread(new ReverseApp()); + Thread reverseT = new Thread(new Reverse()); reverseT.start(); } diff --git a/overview.png b/overview.png index 56871ee..b70d0b5 100644 Binary files a/overview.png and b/overview.png differ diff --git a/overview.uxf b/overview.uxf index 878b565..480732a 100644 --- a/overview.uxf +++ b/overview.uxf @@ -4,46 +4,21 @@ UMLClass - 1210 - 480 + 1250 + 410 90 - 30 - - inet -lt=- - - - - UMLClass - - 810 - 480 - 120 70 -mobile -modem - - - - UMLClass - - 980 - 480 - 100 - 30 - - webhost -lt=- -layer=-1 +inet +lt=- UMLClass - 1210 - 520 + 1250 + 750 90 30 @@ -54,8 +29,8 @@ bg=#90CAF9 UMLClass - 980 - 520 + 1020 + 750 100 30 @@ -67,8 +42,8 @@ layer=-1 Relation - 730 - 570 + 770 + 820 280 50 @@ -80,8 +55,8 @@ Generated by Loop Relation - 1060 - 610 + 1100 + 860 200 40 @@ -93,8 +68,8 @@ fg=#1E88E5 UMLClass - 650 - 520 + 690 + 750 100 30 @@ -106,21 +81,21 @@ layer=-1 Relation - 730 - 720 + 770 + 970 280 50 lt=<<<- -GET (Ride)(Request) +POST (Ride)(Request) (Data) 260.0;20.0;10.0;20.0 Relation - 1060 - 740 + 1100 + 990 200 40 @@ -132,8 +107,8 @@ fg=#1E88E5 Relation - 730 - 780 + 770 + 1030 280 40 @@ -144,8 +119,8 @@ OK (Ride) UMLClass - 450 - 520 + 490 + 750 80 30 @@ -156,8 +131,8 @@ bg=#90CAF9 Relation - 490 - 650 + 530 + 900 190 40 @@ -169,8 +144,8 @@ fg=#1E88E5 Relation - 490 - 700 + 530 + 950 190 40 @@ -182,8 +157,8 @@ fg=#1E88E5 Relation - 730 - 630 + 770 + 880 280 40 @@ -194,22 +169,23 @@ OK (Ride)(Request) UMLClass - 450 - 480 + 490 + 410 300 - 30 + 70 - localhost + +localhost lt=- UMLClass - 420 - 450 + 460 + 810 910 - 400 + 280 lt=.. @@ -219,8 +195,8 @@ layer=-10 UMLClass - 990 - 590 + 1030 + 840 80 40 @@ -233,13 +209,13 @@ transparency=0 UMLClass - 660 - 590 + 700 + 840 80 - 60 + 210 - Available -Rides + +Ride bg=#FFF59D transparency=0 @@ -247,8 +223,8 @@ transparency=0 UMLClass - 990 - 630 + 1030 + 880 80 110 @@ -262,36 +238,8 @@ layer=1 UMLClass - 660 - 650 - 80 - 70 - - Booked -Rides -bg=#E6EE9C -transparency=0 - - - - UMLClass - - 660 - 720 - 80 - 80 - - Loaded -Rides -bg=#A5D6A7 -transparency=0 - - - - UMLClass - - 990 - 740 + 1030 + 990 80 60 @@ -304,32 +252,32 @@ transparency=0 Relation - 1240 - 540 + 1280 + 770 30 - 310 + 320 lt=- fg=#1E88E5 - 10.0;10.0;10.0;290.0 + 10.0;10.0;10.0;300.0 Relation - 480 - 540 + 520 + 770 30 - 310 + 320 lt=- fg=#1E88E5 - 10.0;10.0;10.0;290.0 + 10.0;10.0;10.0;300.0 UMLClass - 1240 - 630 + 1280 + 880 20 130 @@ -342,8 +290,8 @@ layer=4 UMLClass - 480 - 670 + 520 + 920 20 50 @@ -356,27 +304,171 @@ layer=4 Relation - 1020 - 540 + 1060 + 770 30 - 310 + 320 lt=- fg=#5E35B1 layer=-4 - 10.0;10.0;10.0;290.0 + 10.0;10.0;10.0;300.0 Relation + + 730 + 770 + 30 + 320 + + lt=- +fg=#5E35B1 +layer=-4 + 10.0;10.0;10.0;300.0 + + + UMLClass + + 700 + 590 + 80 + 50 + + Check +Supply +bg=#FFF59D +transparency=0 + + + + UMLClass + + 850 + 410 + 120 + 70 + + +mobile +modem + + + + UMLClass + + 1020 + 410 + 100 + 70 + + +webhost +lt=- +layer=-1 + + + + UMLClass + + 1020 + 510 + 100 + 30 + + forward +bg=#B39DDB +layer=-1 + + + + UMLClass 690 - 540 + 510 + 100 + 30 + + reverse +bg=#B39DDB +layer=-1 + + + + UMLClass + + 460 + 570 + 910 + 110 + + +lt=.. +layer=-10 + + + + UMLClass + + 1030 + 590 + 80 + 50 + + Available +Rides +bg=#FFF59D +transparency=0 + + + + Relation + + 1060 + 530 + 30 + 150 + + lt=- +fg=#5E35B1 +layer=-4 + 10.0;10.0;10.0;130.0 + + + Relation + + 730 + 530 30 - 310 + 150 lt=- fg=#5E35B1 layer=-4 - 10.0;10.0;10.0;290.0 + 10.0;10.0;10.0;130.0 + + + Relation + + 770 + 580 + 280 + 40 + + lt=<<<- +POST (Available) + 260.0;20.0;10.0;20.0 + + + Relation + + 770 + 610 + 280 + 40 + + lt=<<<. +OK (# Available) + 10.0;20.0;260.0;20.0 diff --git a/reverse/src/main/java/com/olexyn/misp/reverse/CheckSuppyR.java b/reverse/src/main/java/com/olexyn/misp/reverse/CheckSuppyR.java new file mode 100644 index 0000000..38d29b9 --- /dev/null +++ b/reverse/src/main/java/com/olexyn/misp/reverse/CheckSuppyR.java @@ -0,0 +1,39 @@ +package com.olexyn.misp.reverse; + +import org.json.JSONObject; + +public class CheckSuppyR implements Runnable { + + private int available; + public int CHECK_SUPPLY_INTERVAL = 100; + + private Reverse reverse; + + public CheckSuppyR(Reverse reverse) { + this.reverse = reverse; + } + + + @Override + public void run() { + while (true) { + JSONObject obj = new JSONObject().put("available", 0); + + try { + String result = Tools.send("POST", reverse.FORWARD_URL, obj.toString()); + + JSONObject resultObj = new JSONObject(result); + + available = resultObj.getInt("available"); + + Thread.sleep(CHECK_SUPPLY_INTERVAL); + + } catch (Exception ignored) { } + } + + + } + + + public int getAvailable() { return available; } +} diff --git a/reverse/src/main/java/com/olexyn/misp/reverse/JourneyGenerator.java b/reverse/src/main/java/com/olexyn/misp/reverse/JourneyGenerator.java new file mode 100644 index 0000000..a045a66 --- /dev/null +++ b/reverse/src/main/java/com/olexyn/misp/reverse/JourneyGenerator.java @@ -0,0 +1,36 @@ +package com.olexyn.misp.reverse; + + +public class JourneyGenerator implements Runnable { + + public int OVERHEAD = 8; + public int CHECK_DEPLETION_INTERVAL = 500; + public int START_NEW_JOURNEY_INTERVAL = 100; + + private Reverse reverse; + private CheckSuppyR checkSuppyR; + + public JourneyGenerator(Reverse reverse , CheckSuppyR checkSuppyR) { + this.reverse = reverse; + this.checkSuppyR = checkSuppyR; + } + + + + @Override + public void run() { + + while (true) { + try { + Thread journeyT = new Thread(new JourneyR(reverse)); + journeyT.setName("journeyT"); + journeyT.start(); + + while (checkSuppyR.getAvailable() > OVERHEAD) { Thread.sleep(CHECK_DEPLETION_INTERVAL); } + + Thread.sleep(START_NEW_JOURNEY_INTERVAL); + + } catch (Exception ignored) { } + } + } +} diff --git a/reverse/src/main/java/com/olexyn/misp/reverse/JourneyR.java b/reverse/src/main/java/com/olexyn/misp/reverse/JourneyR.java new file mode 100644 index 0000000..d08caad --- /dev/null +++ b/reverse/src/main/java/com/olexyn/misp/reverse/JourneyR.java @@ -0,0 +1,53 @@ +package com.olexyn.misp.reverse; + +import com.olexyn.misp.helper.Ride; + +import java.io.IOException; + +public class JourneyR implements Runnable { + + private Reverse reverse; + + public JourneyR(Reverse reverse) { + this.reverse = reverse; + } + + + @Override + public void run() { + try { + Ride _ride = sendPostRide(); + _ride = sendGetRequest(_ride); + sendPostRideRequestData(_ride); + } catch (Exception ignored) { } + } + + + Ride sendPostRide() throws IOException { + + final Ride ride = new Ride(); + + final String result = Tools.send("POST", reverse.FORWARD_URL, ride.json()); + + String _req = new Ride(result).getRequest(); + String request = (_req == null) ? "" : _req; + ride.setRequest(request); + + return ride; + } + + + Ride sendGetRequest(Ride ride) throws IOException { + + final String result = Tools.send("GET", reverse.APP_URL, ride.getRequest()); + ride.setData(result); + + return ride; + } + + + void sendPostRideRequestData(Ride ride) throws IOException { + + Tools.send("POST", reverse.FORWARD_URL, ride.json()); + } +} \ No newline at end of file diff --git a/reverse/src/main/java/com/olexyn/misp/reverse/README.md b/reverse/src/main/java/com/olexyn/misp/reverse/README.md index 43d0100..b306e30 100644 --- a/reverse/src/main/java/com/olexyn/misp/reverse/README.md +++ b/reverse/src/main/java/com/olexyn/misp/reverse/README.md @@ -1,3 +1,16 @@ -* Run from `ReverseApp` : - * as `main()` - * or as `Runnable` from somewhere else. \ No newline at end of file +#### Overview +* `Reverse` + * Core + * Starts Threads + * Coordinates + * Launch from here + * as `main()` + * or as `Runnable` from somewhere else. +* `CheckSupply` + * Runnable + * Asks *forward* about supply. +* `Journey` + * Runnable + * Journey fo a `Ride` through the App. +* `Tools` + * Performs the actual request. \ No newline at end of file diff --git a/reverse/src/main/java/com/olexyn/misp/reverse/Reverse.java b/reverse/src/main/java/com/olexyn/misp/reverse/Reverse.java index 4308045..9725eb0 100644 --- a/reverse/src/main/java/com/olexyn/misp/reverse/Reverse.java +++ b/reverse/src/main/java/com/olexyn/misp/reverse/Reverse.java @@ -1,117 +1,31 @@ package com.olexyn.misp.reverse; -import com.olexyn.misp.helper.Ride; -import org.json.JSONObject; +public class Reverse implements Runnable { -import java.io.BufferedReader; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.HttpURLConnection; -import java.net.URL; - - -public class Reverse { - - - private int available; public String FORWARD_URL = "http://localhost:8090/forward"; public String APP_URL = "http://localhost:8090/app"; - public void start() throws IOException { - - sendPostAvailable(); - sendPostRide(); - - - } - - - void sendPostRide() throws IOException { - - final Ride ride = new Ride(); - - final String result = send("POST", FORWARD_URL, ride.json()); - - - - - - - String _req = new Ride(result).getRequest(); - String request = (_req == null) ? "" : _req; - ride.setRequest(request); - - sendGetRequest(ride); - } - - - void sendGetRequest(Ride ride) throws IOException { + public void start() { - final String result = send("GET", APP_URL, ride.getRequest()); - ride.setData(result); + CheckSuppyR checkSuppyR = new CheckSuppyR(this); - sendPostRideRequestData(ride); - } - - - void sendPostRideRequestData(Ride ride) throws IOException { - - send("POST", FORWARD_URL, ride.json()); - - //sendPostRide(); + Thread checkSupplyT = new Thread(checkSuppyR); + checkSupplyT.setName("checkSupplyT"); + checkSupplyT.start(); + Thread journeyGeneratorT = new Thread(new JourneyGenerator(this, checkSuppyR)); + journeyGeneratorT.setName("journeyGeneratorT"); + journeyGeneratorT.start(); } - void sendPostAvailable() throws IOException { - JSONObject obj = new JSONObject(); - obj.put("available", 0); - String result = send("POST", FORWARD_URL, obj.toString()); - JSONObject resultObj = new JSONObject(result); - available = resultObj.getInt("available"); - - } - - - - - private String send(String method, String urlString, String body) throws IOException { + public static void main(String... args) { new Reverse().start(); } - URL url = new URL(urlString); - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - connection.setRequestMethod(method); - - - boolean getToForward = method.equals("GET") && urlString.contains("forward"); - - if (method.equals("POST") || getToForward) { - connection.setDoOutput(true); - - - DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream()); - - if (body != null) { - outputStream.writeBytes(body); - } - - outputStream.flush(); - outputStream.close(); - - } - - - int i = connection.getResponseCode(); - BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); - String out; - StringBuilder sb = new StringBuilder(); - while ((out = in.readLine()) != null) { sb.append(out); } - in.close(); - return sb.toString(); - } + @Override + public void run() { start(); } } diff --git a/reverse/src/main/java/com/olexyn/misp/reverse/ReverseApp.java b/reverse/src/main/java/com/olexyn/misp/reverse/ReverseApp.java deleted file mode 100644 index 28d69e2..0000000 --- a/reverse/src/main/java/com/olexyn/misp/reverse/ReverseApp.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.olexyn.misp.reverse; - -import java.io.IOException; - -public class ReverseApp implements Runnable { - - - public static void main(String... args) throws IOException { - new ReverseApp().doRun(); - } - - - @Override - public void run() { - - try { - doRun(); - } catch (IOException e) { - e.printStackTrace(); - } - - } - - - private void doRun() throws IOException { - Reverse reverse = new Reverse(); - - reverse.FORWARD_URL = "http://localhost:8090/forward"; - reverse.APP_URL = "http://localhost:8090/app"; - - - - reverse.start(); - } -} diff --git a/reverse/src/main/java/com/olexyn/misp/reverse/Tools.java b/reverse/src/main/java/com/olexyn/misp/reverse/Tools.java new file mode 100644 index 0000000..5fe3c03 --- /dev/null +++ b/reverse/src/main/java/com/olexyn/misp/reverse/Tools.java @@ -0,0 +1,46 @@ +package com.olexyn.misp.reverse; + +import java.io.BufferedReader; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; + +public class Tools { + + + static String send(String method, String urlString, String body) throws IOException { + + URL url = new URL(urlString); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod(method); + + + boolean getToForward = method.equals("GET") && urlString.contains("forward"); + + if (method.equals("POST") || getToForward) { + connection.setDoOutput(true); + + + DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream()); + + if (body != null) { + outputStream.writeBytes(body); + } + + outputStream.flush(); + outputStream.close(); + + } + + + int i = connection.getResponseCode(); + BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); + String out; + StringBuilder sb = new StringBuilder(); + while ((out = in.readLine()) != null) { sb.append(out); } + in.close(); + return sb.toString(); + } +}