diff --git a/.gradle/7.1/executionHistory/executionHistory.bin b/.gradle/7.1/executionHistory/executionHistory.bin index a6c89ef..c9a290a 100644 Binary files a/.gradle/7.1/executionHistory/executionHistory.bin and b/.gradle/7.1/executionHistory/executionHistory.bin differ diff --git a/.gradle/7.1/executionHistory/executionHistory.lock b/.gradle/7.1/executionHistory/executionHistory.lock index b99f05d..9675f43 100644 Binary files a/.gradle/7.1/executionHistory/executionHistory.lock and b/.gradle/7.1/executionHistory/executionHistory.lock differ diff --git a/.gradle/7.1/fileHashes/fileHashes.bin b/.gradle/7.1/fileHashes/fileHashes.bin index 1117e74..e5e9bf7 100644 Binary files a/.gradle/7.1/fileHashes/fileHashes.bin and b/.gradle/7.1/fileHashes/fileHashes.bin differ diff --git a/.gradle/7.1/fileHashes/fileHashes.lock b/.gradle/7.1/fileHashes/fileHashes.lock index f00e982..bbe791b 100644 Binary files a/.gradle/7.1/fileHashes/fileHashes.lock and b/.gradle/7.1/fileHashes/fileHashes.lock differ diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 450cc19..642f185 100644 Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/.gradle/checksums/checksums.lock b/.gradle/checksums/checksums.lock index c590545..340dbe9 100644 Binary files a/.gradle/checksums/checksums.lock and b/.gradle/checksums/checksums.lock differ diff --git a/build/classes/java/main/com/example/DeliveryCar$CheckStop.class b/build/classes/java/main/com/example/DeliveryCar$CheckStop.class index e2c4eac..a104d3d 100644 Binary files a/build/classes/java/main/com/example/DeliveryCar$CheckStop.class and b/build/classes/java/main/com/example/DeliveryCar$CheckStop.class differ diff --git a/build/classes/java/main/com/example/DeliveryCar$LoadMessage.class b/build/classes/java/main/com/example/DeliveryCar$LoadMessage.class index 1987861..3018329 100644 Binary files a/build/classes/java/main/com/example/DeliveryCar$LoadMessage.class and b/build/classes/java/main/com/example/DeliveryCar$LoadMessage.class differ diff --git a/build/classes/java/main/com/example/DeliveryCar$PickupResponse.class b/build/classes/java/main/com/example/DeliveryCar$PickupResponse.class index 6a5bf7c..0ee5351 100644 Binary files a/build/classes/java/main/com/example/DeliveryCar$PickupResponse.class and b/build/classes/java/main/com/example/DeliveryCar$PickupResponse.class differ diff --git a/build/classes/java/main/com/example/DeliveryCar$StartRoute.class b/build/classes/java/main/com/example/DeliveryCar$StartRoute.class index 6fbaa1b..65ef920 100644 Binary files a/build/classes/java/main/com/example/DeliveryCar$StartRoute.class and b/build/classes/java/main/com/example/DeliveryCar$StartRoute.class differ diff --git a/build/classes/java/main/com/example/DeliveryCar.class b/build/classes/java/main/com/example/DeliveryCar.class index 41bbc19..9f31e90 100644 Binary files a/build/classes/java/main/com/example/DeliveryCar.class and b/build/classes/java/main/com/example/DeliveryCar.class differ diff --git a/build/classes/java/main/com/example/DistributionCenter$GenerateRoutes.class b/build/classes/java/main/com/example/DistributionCenter$GenerateRoutes.class index d209414..747d208 100644 Binary files a/build/classes/java/main/com/example/DistributionCenter$GenerateRoutes.class and b/build/classes/java/main/com/example/DistributionCenter$GenerateRoutes.class differ diff --git a/build/classes/java/main/com/example/DistributionCenter$StartAllRoutes.class b/build/classes/java/main/com/example/DistributionCenter$StartAllRoutes.class index 0aa7244..9bcf206 100644 Binary files a/build/classes/java/main/com/example/DistributionCenter$StartAllRoutes.class and b/build/classes/java/main/com/example/DistributionCenter$StartAllRoutes.class differ diff --git a/build/classes/java/main/com/example/DistributionCenter.class b/build/classes/java/main/com/example/DistributionCenter.class index 0938943..4511246 100644 Binary files a/build/classes/java/main/com/example/DistributionCenter.class and b/build/classes/java/main/com/example/DistributionCenter.class differ diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index 03bfb24..3b1c7ab 100644 Binary files a/build/tmp/compileJava/previous-compilation-data.bin and b/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/src/main/java/com/example/DeliveryCar.java b/src/main/java/com/example/DeliveryCar.java index 135e7ec..559ff53 100644 --- a/src/main/java/com/example/DeliveryCar.java +++ b/src/main/java/com/example/DeliveryCar.java @@ -1,3 +1,4 @@ +// DeliveryCar.java package com.example; import akka.actor.typed.ActorRef; @@ -50,74 +51,61 @@ public class DeliveryCar extends AbstractBehavior { private Behavior onLoadMessage(LoadMessage msg) { pakete.addAll(msg.pakete); - scheduleNextStopCheck(); + getContext().getLog().info("Geladen {} Pakete in den LKW.", msg.pakete.size()); + scheduleNextStopCheck(Duration.ofSeconds(3)); // Start checking the first stop after 3 seconds return this; } private Behavior onPickupResponse(PickupResponse rsp) { - if (rsp.paket == null || rsp.paket.inhalt == null) { - scheduleNextStopCheck(); - } else { - if (pakete.size() < maxCapacity) { - pakete.add(rsp.paket); - getContext().getLog().info("Current number of packages in the truck: {}", pakete.size()); - } - scheduleNextStopCheck(); + if (rsp.paket != null && rsp.paket.inhalt != null && pakete.size() < maxCapacity) { + pakete.add(rsp.paket); + getContext().getLog().info("Ein Paket abgeholt. Aktuelle Anzahl der Pakete im LKW: {}", pakete.size()); } - + scheduleNextStopCheck(Duration.ofSeconds(1)); // Move to the next stop after 1 second return this; } private Behavior onCheckStop(CheckStop stop) { if (globalIndex >= route.size()) { - getContext().getLog().info("Car is returning to the distribution center."); + getContext().getLog().info("Der LKW kehrt zum Verteilzentrum zurück."); DistributionCenter.ArriveMessage antwort = new DistributionCenter.ArriveMessage(pakete, getContext().getSelf()); getDistributionCenter().tell(antwort); + pakete.clear(); globalIndex = 0; } else { - getContext().getLog().info("I am at {}", route.get(globalIndex).path().name()); - if (pakete.size() >= maxCapacity) { - deliverPackages(); - } else { - sendPickupMessage(); + ActorRef currentStop = route.get(globalIndex); + getContext().getLog().info("Ich bin bei {}", currentStop.path().name()); + deliverPackages(currentStop); + if (pakete.size() < maxCapacity) { + sendPickupMessage(currentStop); } globalIndex++; + scheduleNextStopCheck(pakete.size() >= maxCapacity ? Duration.ofSeconds(1) : Duration.ofSeconds(3)); } - scheduleNextStopCheck(); return this; } - private Behavior onStartRoute(StartRoute msg) { globalIndex = 0; - scheduleNextStopCheck(); + scheduleNextStopCheck(Duration.ofSeconds(3)); // Start checking the first stop after 3 seconds return this; } - private void sendPickupMessage() { - if (globalIndex < route.size()) { - ActorRef nextCustomer = route.get(globalIndex); - nextCustomer.tell(new Customer.PickUpMessage(getContext().getSelf(), "Car can pick up package")); - } else { - getContext().getLog().info("No more customers in the route."); - } + private void sendPickupMessage(ActorRef customer) { + customer.tell(new Customer.PickUpMessage(getContext().getSelf(), "LKW kann Paket abholen")); } - private void deliverPackages() { - if (globalIndex < route.size()) { - ActorRef nextCustomer = route.get(globalIndex); - for (int i = 0; i < pakete.size(); i++) { - Paket paket = pakete.get(i); - if (paket.empfaenger == nextCustomer) { - nextCustomer.tell(new Customer.DeliveryMessage(paket)); - pakete.remove(i); - i--; // Adjust index since an element is removed - } + private void deliverPackages(ActorRef customer) { + pakete.removeIf(paket -> { + if (paket.empfaenger.equals(customer)) { + customer.tell(new Customer.DeliveryMessage(paket)); + return true; } - } + return false; + }); } - private void scheduleNextStopCheck() { - timers.startSingleTimer(new CheckStop(), Duration.ofSeconds(3)); + private void scheduleNextStopCheck(Duration duration) { + timers.startSingleTimer(new CheckStop(), duration); } } diff --git a/src/main/java/com/example/DistributionCenter.java b/src/main/java/com/example/DistributionCenter.java index 82f043d..9fdf470 100644 --- a/src/main/java/com/example/DistributionCenter.java +++ b/src/main/java/com/example/DistributionCenter.java @@ -1,3 +1,4 @@ +// DistributionCenter.java package com.example; import akka.actor.typed.ActorRef; @@ -19,7 +20,6 @@ public class DistributionCenter extends AbstractBehavior lagerraum = new ArrayList<>(); private final List> deliveryCars = new ArrayList<>(); - private DistributionCenter(ActorContext context, ActorRef addressBook) { super(context); this.addressBook = addressBook; @@ -65,8 +65,6 @@ public class DistributionCenter extends AbstractBehavior> customers; @@ -92,14 +90,7 @@ public class DistributionCenter extends AbstractBehavior arrivedPackages = msg.getPakete(); lagerraum.addAll(arrivedPackages); - String arrivedPackagesString = ""; - for (int i = 0; i < arrivedPackages.size(); i++) { - arrivedPackagesString += arrivedPackages.get(i).inhalt; - if (i < arrivedPackages.size() - 1) { - arrivedPackagesString += ", "; // Fügen Sie ein Trennzeichen hinzu, außer für das letzte Paket - } - } - getContext().getLog().info("Angekommene Pakete: {} Anz Packeten in Lager: {}", arrivedPackagesString, lagerraum.size()); + getContext().getLog().info("Angekommene Pakete: {} Anz Packeten in Lager: {}", arrivedPackages.size(), lagerraum.size()); // Entferne zufällig 3 Pakete aus dem Lagerraum und sende sie dem angekommenen Wagen int numPackagesToSend = Math.min(3, lagerraum.size()); @@ -115,8 +106,6 @@ public class DistributionCenter extends AbstractBehavior onGenerateRoutes(GenerateRoutes msg) { List> customers = msg.getCustomers(); generateRoutes(customers); @@ -124,32 +113,28 @@ public class DistributionCenter extends AbstractBehavior> customers) { - // Überprüfen, ob die Kundenliste null oder leer ist if (customers == null || customers.isEmpty()) { getContext().getLog().info("Kundenliste ist leer oder null. Keine Routen generiert."); return; } - // Erstelle vier Lastwagen mit zufälligen Routen - for (int i = 0; i < 2; i++) { - /*List> route = generateRandomRoute(customers); - getContext().spawn(DeliveryCar.create(route), "deliveryCar" + i+1); - getContext().getLog().info("Lieferwagen {} erstellt mit Route: {}", i+1, route.toString());*/ + for (int i = 0; i < 4; i++) { // Erstelle vier Lieferwagen List> route = generateRandomRoute(customers); ActorRef deliveryCar = getContext().spawn(DeliveryCar.create(route), "deliveryCar" + (i + 1)); + deliveryCars.add(deliveryCar); - String RouteStr = ""; + StringBuilder routeStr = new StringBuilder(); for (int j = 0; j < route.size(); j++) { - RouteStr += route.get(j).path().name(); + routeStr.append(route.get(j).path().name()); if (j < route.size() - 1) { - RouteStr += ", "; // Fügen Sie ein Trennzeichen hinzu, außer für das letzte Paket + routeStr.append(", "); } } - getContext().getLog().info("Lieferwagen {} erstellt mit Route: {}", i + 1, RouteStr); + getContext().getLog().info("Lieferwagen {} erstellt mit Route: {}", i + 1, routeStr); deliveryCar.tell(new DeliveryCar.StartRoute()); - } } + private Behavior onStartAllRoutes(StartAllRoutes msg) { for (ActorRef deliveryCar : deliveryCars) { deliveryCar.tell(new DeliveryCar.StartRoute()); @@ -157,10 +142,9 @@ public class DistributionCenter extends AbstractBehavior> generateRandomRoute(List> customers) { List> route = new ArrayList<>(customers); Collections.shuffle(route); return route; } -} \ No newline at end of file +}