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.
|