62 lines
2.3 KiB
Java
62 lines
2.3 KiB
Java
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<AddressBook.Message> {
|
|
ArrayList<ActorRef<Customer.Message>> 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<Customer.Message> fragender;
|
|
public final String nameFragender;
|
|
public final ActorRef<DeliveryCar.Message> truckReference;
|
|
|
|
public CustomerMessage(ActorRef<Customer.Message> fragender, String nameFragender, ActorRef<DeliveryCar.Message> truckReference) {
|
|
this.fragender = fragender;
|
|
this.nameFragender = nameFragender;
|
|
this.truckReference = truckReference;
|
|
}
|
|
}
|
|
|
|
private AddressBook(ActorContext<Message> context, ArrayList<ActorRef<Customer.Message>> custo) {
|
|
super(context);
|
|
if (!custo.isEmpty()) {
|
|
this.customers.addAll(custo);
|
|
for (ActorRef<Customer.Message> cst : this.customers) {
|
|
cst.tell(new Customer.AddressHello(getContext().getSelf()));
|
|
}
|
|
}
|
|
}
|
|
|
|
public static Behavior<Message> create(ArrayList<ActorRef<Customer.Message>> custo) {
|
|
return Behaviors.setup(context -> new AddressBook(context, custo));
|
|
}
|
|
|
|
@Override
|
|
public Receive<Message> createReceive() {
|
|
return newReceiveBuilder()
|
|
.onMessage(CustomerMessage.class, this::onCustomerMessage)
|
|
.build();
|
|
}
|
|
|
|
// Methode, um einen zufälligen Empfänger auszugeben
|
|
private Behavior<Message> onCustomerMessage(CustomerMessage msg) {
|
|
Random random = new Random();
|
|
int index = random.nextInt(customers.size());
|
|
ActorRef<Customer.Message> addressOf = customers.get(index);
|
|
getContext().getLog().info("{} asked for an address", msg.nameFragender);
|
|
msg.fragender.tell(new Customer.AddressMessage(addressOf, msg.truckReference));
|
|
return this;
|
|
}
|
|
}
|