diff --git a/.gradle/7.1/executionHistory/executionHistory.bin b/.gradle/7.1/executionHistory/executionHistory.bin index 670278b..d0e61a7 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 51fa88b..f2762d2 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 a1ca05d..e7f6d71 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 dc5caf0..34a3eba 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 2477e21..539e336 100644 Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin index 33ae91a..a1e82de 100644 Binary files a/.gradle/buildOutputCleanup/outputFiles.bin and b/.gradle/buildOutputCleanup/outputFiles.bin differ diff --git a/build/classes/java/main/com/example/AkkaMainSystem.class b/build/classes/java/main/com/example/AkkaMainSystem.class index fc8f7cb..1c52899 100644 Binary files a/build/classes/java/main/com/example/AkkaMainSystem.class and b/build/classes/java/main/com/example/AkkaMainSystem.class differ diff --git a/build/classes/java/main/com/example/Customer.class b/build/classes/java/main/com/example/Customer.class index 62003f3..8653b7a 100644 Binary files a/build/classes/java/main/com/example/Customer.class and b/build/classes/java/main/com/example/Customer.class differ diff --git a/build/classes/java/main/com/example/DistributionCenter.class b/build/classes/java/main/com/example/DistributionCenter.class index 09c0359..b81c67a 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 370b12a..836882c 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/AkkaMainSystem.java b/src/main/java/com/example/AkkaMainSystem.java index bb8e684..34cd799 100644 --- a/src/main/java/com/example/AkkaMainSystem.java +++ b/src/main/java/com/example/AkkaMainSystem.java @@ -31,9 +31,13 @@ public class AkkaMainSystem extends AbstractBehavior { // Erstellen des Adressbuchs ArrayList> customers = new ArrayList<>(); // Erstellen von vier Empfänger*innen - for (int i = 0; i < 4; i++) { + /* for (int i = 0; i < 4; i++) { customers.add(getContext().spawn(Customer.create("Customer" + (i + 1)), "customer" + (i + 1))); - } + }*/ + customers.add(getContext().spawn(Customer.create("Alice"+( 1)) ,"alice"+(1))); + customers.add(getContext().spawn(Customer.create("Bob"+( 1)) ,"bob"+(1))); + customers.add(getContext().spawn(Customer.create("Charles"+( 1)) ,"charles"+(1))); + customers.add(getContext().spawn(Customer.create("Derick"+( 1)) ,"derick"+(1))); ActorRef addressBook = getContext().spawn(AddressBook.create(customers), "addressBook"); // Nachricht GetCustomers senden, um Kundenreferenzen abzurufen diff --git a/src/main/java/com/example/Customer.java b/src/main/java/com/example/Customer.java index 51ac188..d6428dc 100644 --- a/src/main/java/com/example/Customer.java +++ b/src/main/java/com/example/Customer.java @@ -77,7 +77,14 @@ public class Customer extends AbstractBehavior { if(number <= 80){ //truck wird hier übergeben, damit man im nächsten Schritt wieder auf ihn zugreifen kann. this.adrBook.tell(new AddressBook.CustomerMessage(getContext().getSelf(), this.name, msg.truckReference)); + + //Methode um einen Paket zu versenden + //über onAddressMessage wird dann Paket aufgenommen + onAddressMessage(new AddressMessage(getContext().getSelf(), msg.truckReference)); + + }else{ + getContext().getLog().info("Kunde {}, will kein Paket abschicken", this.name); msg.truckReference.tell(new DeliveryCar.PickupResponse(null)); } return this; diff --git a/src/main/java/com/example/DeliveryCar.java b/src/main/java/com/example/DeliveryCar.java index 4b1d4f6..0f9509b 100644 --- a/src/main/java/com/example/DeliveryCar.java +++ b/src/main/java/com/example/DeliveryCar.java @@ -6,6 +6,7 @@ import akka.actor.typed.javadsl.AbstractBehavior; import akka.actor.typed.javadsl.ActorContext; import akka.actor.typed.javadsl.Behaviors; import akka.actor.typed.javadsl.Receive; +import akka.actor.typed.javadsl.TimerScheduler; import java.util.ArrayList; import java.util.List; @@ -15,6 +16,7 @@ public class DeliveryCar extends AbstractBehavior { private final ArrayList pakete = new ArrayList<>(); private final ArrayList> route; private final int maxCapacity = 3; + private int globalIndex = 0; public interface Message {} @@ -22,7 +24,9 @@ public class DeliveryCar extends AbstractBehavior { public record PickupResponse(Paket paket) implements Message {} - public record ContinueRoute() implements Message {} + public record StartRoute() implements Message {} + + public record RestartRoute() implements Message{} private DeliveryCar(ActorContext context, ArrayList> route) { super(context); @@ -38,10 +42,8 @@ public class DeliveryCar extends AbstractBehavior { return newReceiveBuilder() .onMessage(LoadMessage.class, this::onLoadMessage) .onMessage(PickupResponse.class, this::onPickupResponse) - .onMessage(ContinueRoute.class, msg -> { - deliverPackages(); - return Behaviors.same(); - }) + .onMessage(StartRoute.class, msg->{ + onStartRoute();return this;}) .build(); } @@ -52,30 +54,81 @@ public class DeliveryCar extends AbstractBehavior { } private Behavior onPickupResponse(PickupResponse rsp) { - pakete.add(rsp.paket); - getContext().getLog().info("Aktuelle Anzahl der Pakete im Truck: {}", pakete.size()); - checkNextStop(); + if(rsp.paket.inhalt == null){ + globalIndex++; + checkNextStop(); + }else { + if(pakete.size()==3){ + checkNextStop(); + } + pakete.add(rsp.paket); + getContext().getLog().info("Aktuelle Anzahl der Pakete im Truck: {}", pakete.size()); + globalIndex++; + checkNextStop(); + } return this; } - +//Die rekursive Methode,die über alle Addressen iteriert private void checkNextStop() { - if (pakete.size() >= maxCapacity || route.isEmpty()) { - getContext().getSelf().tell(new ContinueRoute()); - } else { + //Wenn Wagen voll ist, dann wird erstmal geguckt ob man ein Paket liefern kann + if (pakete.size() >= maxCapacity) { + deliverPackages(); + checkNextStop(); + } + //Wenn fertig iteriert so geht der Wagen an den Verteilerzentrum + if(globalIndex==4){ + DistributionCenter.ArriveMessage antwort = new DistributionCenter.ArriveMessage(pakete,getContext().getSelf()); + //Fehlende Antwort an den Verteilerzentrum + + + // + + } + else { + //Guckt ob Paket für Kunden da ist und fragt an ob etwas mitgenommen werden muss + deliverPackages(); sendPickupMessage(); } } - - private void sendPickupMessage() { - ActorRef nextCustomer = route.remove(0); - nextCustomer.tell(new Customer.PickUpMessage(getContext().getSelf(), "Some string")); - } - - private void deliverPackages() { - ActorRef nextCustomer = route.get(0); - for (Paket paket : pakete) { - nextCustomer.tell(new Customer.DeliveryMessage(paket)); + private Behavior onStartRoute(){ + if(globalIndex==0){ + checkNextStop(); + return this; + }else{ + if(globalIndex==4) { + globalIndex = 0; + onStartRoute(); + } } - pakete.clear(); + return this; } + +//Sendet PickUp Nachricht an den jetztigen Kunden wo der gerade ist. + private void sendPickupMessage() { + ActorRef nextCustomer = route.get(globalIndex); + nextCustomer.tell(new Customer.PickUpMessage(getContext().getSelf(), "Wagen kann Paket aufnehmen")); + globalIndex++; + } + + + //Prüft ob Paket im Wagen für den Empfänger ist oder nicht, falls ja wird dieser direkt entfernt + private void deliverPackages() { + ActorRef nextCustomer = route.get(globalIndex); + //Iteriert über alle Pakete + for (Paket paket : pakete) { + //Falls Empfänger vorhanden so wird dieser aus dem Wagen genommen und geht dann weiter + if(pakete.get(globalIndex).empfaenger == nextCustomer ) { + nextCustomer.tell(new Customer.DeliveryMessage(paket)); + pakete.remove(globalIndex); + globalIndex++; + } + } + + } + + private void removeMessage(Paket paket){ + pakete.remove(paket); + } + + } \ No newline at end of file diff --git a/src/main/java/com/example/DistributionCenter.java b/src/main/java/com/example/DistributionCenter.java index c29fdd1..909529a 100644 --- a/src/main/java/com/example/DistributionCenter.java +++ b/src/main/java/com/example/DistributionCenter.java @@ -137,8 +137,8 @@ public class DistributionCenter extends AbstractBehavior> route = generateRandomRoute(customers); - getContext().spawn(DeliveryCar.create(route), "deliveryCar" + i); - getContext().getLog().info("Lieferwagen {} erstellt mit Route: {}", i, route); + getContext().spawn(DeliveryCar.create(route), "deliveryCar" + i+1); + getContext().getLog().info("Lieferwagen {} erstellt mit Route: {}", i+1, route.toString()); } }