Blatt04/README.md

42 lines
1.5 KiB
Markdown
Raw Permalink Normal View History

2024-05-09 18:24:41 +02:00
# Blatt 04 - Timed Messages
In diesem Blatt ging es allen voran, um die möglichkeit Zeitgesteuert Nachrichten zu senden. Möglich macht es der
`TimerScheduler`.
Damit ein Aktor zugriff auf einen `TimerScheduler` hat, muss der Aktor damit erstellt werden. Anstelle dem _regulärem_
```java
public static Behavior<Message> create(... arguments ...) {
return Behaviors.setup(context -> new Actor(context, ... arguments ...));
}
```
muss ein Aktor nun mit `Timers` erstellt werden.
```java
public static Behavior<Message> create(... arguments ...) {
return Behaviors.setup(context -> Behaviors.withTimers(timers -> new Actor(context, timers, ... arguments ...)));
}
```
Entsprechend muss im Konstruktor dann auch an der entsprechenden Stelle ein `TimerScheduler` erwartet werden.
```java
private Actor(ActorContext<Message> context, TimerScheduler<Message> timers, ... arguments ...) {
super(context);
this.timers = timers; // wir speichern uns einfach den TimerScheduler
// restliche argumente setzen
}
```
Nun kann der `TimerScheduler` genutzt werden. Grundsätzlich wird mit dem `TimerScheduler` eine Nachricht nach einer
bestimmten Zeit **an sich selbst** gesendet. Diese muss (wie jede Nachricht) dann auch behandelt werden.
Der Code
```java
this.timers.startSingleTimer(new Message(), Duration.ofSeconds(10));
```
sendet eine Nachricht (`Message`) nach 10 Sekunden an sich selbst.
`TimerScheduler` können noch mehr, aber das ist erstmal alles, was zum Verständnis der Aufgabe gebraucht wird.