2018-07-17 19:23:54 +02:00
|
|
|
package de.mrbesen.telegram.event;
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
2019-05-18 18:54:31 +02:00
|
|
|
import java.util.HashMap;
|
2019-05-19 16:01:46 +02:00
|
|
|
import java.util.function.Consumer;
|
2018-07-17 19:23:54 +02:00
|
|
|
|
|
|
|
public class EventManager {
|
2019-05-18 18:54:31 +02:00
|
|
|
|
2021-01-16 14:53:13 +01:00
|
|
|
private HashMap<Class<? extends Event>, ArrayList<Consumer<? extends Event>>> listeners = new HashMap<>();
|
2019-05-18 18:54:31 +02:00
|
|
|
|
2018-07-18 04:44:04 +02:00
|
|
|
public EventManager() {}
|
2019-05-18 18:54:31 +02:00
|
|
|
|
2021-01-16 14:53:13 +01:00
|
|
|
public <T extends Event> void registerEvent(Class<T> eventtype, Consumer<T> handler) {
|
2019-05-19 16:01:46 +02:00
|
|
|
if (handler == null) {
|
2018-07-17 19:23:54 +02:00
|
|
|
throw new NullPointerException();
|
|
|
|
}
|
2018-07-18 04:44:04 +02:00
|
|
|
|
2019-05-18 18:54:31 +02:00
|
|
|
//get list
|
2021-01-16 14:53:13 +01:00
|
|
|
ArrayList<Consumer<? extends Event>> list = listeners.get(eventtype);
|
2019-05-18 18:54:31 +02:00
|
|
|
if (list == null) {
|
2019-05-19 16:01:46 +02:00
|
|
|
//create and add list
|
|
|
|
list = new ArrayList<>();
|
2019-05-18 18:54:31 +02:00
|
|
|
listeners.put(eventtype, list);
|
2019-05-19 16:01:46 +02:00
|
|
|
} else if(list.contains(handler)) {
|
2019-05-18 18:54:31 +02:00
|
|
|
throw new IllegalArgumentException("listener allready registered");
|
2018-07-18 04:44:04 +02:00
|
|
|
}
|
2019-05-18 18:54:31 +02:00
|
|
|
|
2019-05-19 16:01:46 +02:00
|
|
|
list.add(handler); // ad to list
|
2018-07-17 19:23:54 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public Event callEvent(Event e) {
|
2021-01-16 14:53:13 +01:00
|
|
|
if(e == null) return null;
|
2020-02-29 11:59:32 +01:00
|
|
|
|
2021-01-16 14:53:13 +01:00
|
|
|
ArrayList<Consumer<? extends Event>> listner = listeners.get(e.getClass());
|
2019-05-19 16:01:46 +02:00
|
|
|
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();
|
|
|
|
}
|
2018-07-17 19:23:54 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return e;
|
|
|
|
}
|
|
|
|
}
|