42 lines
1.5 KiB
Markdown
42 lines
1.5 KiB
Markdown
# 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.
|