TelegramAPI/src/main/java/de/mrbesen/telegram/event/EventManager.java

48 lines
1.2 KiB
Java

package de.mrbesen.telegram.event;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.function.Consumer;
public class EventManager {
private HashMap<Class<? extends Event>, ArrayList<Consumer<? extends Event>>> listeners = new HashMap<>();
public EventManager() {}
public <T extends Event> void registerEvent(Class<T> eventtype, Consumer<T> handler) {
if (handler == null) {
throw new NullPointerException();
}
//get list
ArrayList<Consumer<? extends Event>> list = listeners.get(eventtype);
if (list == null) {
//create and add list
list = new ArrayList<>();
listeners.put(eventtype, list);
} else if(list.contains(handler)) {
throw new IllegalArgumentException("listener allready registered");
}
list.add(handler); // ad to list
}
public Event callEvent(Event e) {
if(e == null) return null;
ArrayList<Consumer<? extends Event>> listner = listeners.get(e.getClass());
if(listner != null) {
for (Consumer listn : listner) {
try {
listn.accept(e);
} catch (Throwable t) {
System.err.println("Error occurred on Handling Event: " + e.getClass().getSimpleName());
t.printStackTrace();
}
}
}
return e;
}
}