package com.example; import akka.actor.typed.ActorRef; import akka.actor.typed.Behavior; 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 java.util.ArrayList; import java.util.Random; public class AddressBook extends AbstractBehavior { ArrayList> customers = new ArrayList<>(); public interface Message {} // Nachricht, wenn ein Empfänger nach einer Adresse fragt public static final class CustomerMessage implements Message { public final ActorRef fragender; public final String nameFragender; public final ActorRef truckReference; public CustomerMessage(ActorRef fragender, String nameFragender, ActorRef truckReference) { this.fragender = fragender; this.nameFragender = nameFragender; this.truckReference = truckReference; } } private AddressBook(ActorContext context, ArrayList> custo) { super(context); if (!custo.isEmpty()) { this.customers.addAll(custo); for (ActorRef cst : this.customers) { cst.tell(new Customer.AddressHello(getContext().getSelf())); } } } public static Behavior create(ArrayList> custo) { return Behaviors.setup(context -> new AddressBook(context, custo)); } @Override public Receive createReceive() { return newReceiveBuilder() .onMessage(CustomerMessage.class, this::onCustomerMessage) .build(); } // Methode, um einen zufälligen Empfänger auszugeben private Behavior onCustomerMessage(CustomerMessage msg) { Random random = new Random(); int index = random.nextInt(customers.size()); ActorRef addressOf = customers.get(index); getContext().getLog().info("{} asked for an address", msg.nameFragender); msg.fragender.tell(new Customer.AddressMessage(addressOf, msg.truckReference)); return this; } }