Własne zdarzenia
Komponenty mogą komunikować się między sobą w ramach tego samego kontenera za pomocą zdarzeń.
INFO
Nasłuchiwanie zdarzeń jest możliwe wyłącznie dla komponentów aktywnych, czyli obecnych w drzewie kontenera. Zobacz więcej w cyklu życia komponentu.
Tworzenie własnego eventu
public class TeamEliminatedEvent extends TreeEvent {
private final Team team;
private final Cause cause;
public TeamEliminatedEvent(Team team, Cause cause) {
this.team = team;
this.cause = cause;
}
public Team getTeam() {
return team;
}
public Cause getCause() {
return cause;
}
}
Rozgłaszanie everntu
Tworzenie obiektu
var event = new TeamEliminatedEvent(team, cause);
Kolejność rozgłaszania w drzewie
Struktura komponentów jest reprezentowana jako drzewo. Możesz wybrać kierunek rozgłaszania eventu. Więcej informacji o algorytmach znajdziesz w sekcji kolejność zdarzeń w drzewie.
W kierunku specjalizacji
container().callSpecialization(event);
W kierunku generalizacji
container().callGeneralization(event);
Musisz wywołać metodę callSpecialization(event)
lub callGeneralization(event)
na obiekcie Container
, aby zdarzenie zostało rozgłoszone w całym drzewie.
Rozgłaszanie we fragmencie drzewa
Event zostanie rozgłoszony tylko na wskazanym komponencie oraz wszystkich jego dzieciach i poddrzewach rekurencyjnie.
component.callGeneralization(event);
// or
component.callGeneralization(event);
Rozgłaszanie dla konkretnego komponentu
Event zostanie obsłużony tylko przez komponent, z którego wywołano metodę.
component.callSelf(event)
Nasłuchiwanie eventu
// Method inside KickEliminatedLogic (Controller)
@TreeEventHandler
public void onTeamEliminated(TeamEliminatedEvent event) {
var eliminatedPlayers = event.getTeam().players();
for (var player : eliminatedPlayers) {
container().removePlayer(player);
}
}
// Method inside EliminatedMessages (Controller)
@TreeEventHandler
public void onTeamEliminated(TeamEliminatedEvent event) {
var teamName = event.getTeam().getName();
var message = "Team " + teamName + " has been eliminated!";
var containerPlayers = players();
for (var player : containerPlayers) {
var teamName = event.getTeam().getName();
player.sendMessage(message);
}
}