updated version, event system reworked

This commit is contained in:
MrBesen 2019-05-19 16:01:46 +02:00
parent da3b3ecf63
commit 5f8dc8875d
Signed by: MrBesen
GPG Key ID: 596B2350DCD67504
4 changed files with 26 additions and 25 deletions

View File

@ -16,6 +16,9 @@
<artifactId>maven-compiler-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version> <version>3.5.1</version>
<configuration> <configuration>
<excludes>
<exclude>de/mrbesen/test/**</exclude>
</excludes>
<source /> <source />
<target /> <target />
</configuration> </configuration>
@ -48,4 +51,5 @@
<maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.target>1.8</maven.compiler.target>
</properties> </properties>
</project> </project>

View File

@ -1,6 +0,0 @@
package de.mrbesen.telegram.event;
public interface EventListener<T extends Event> {
public void handleEvent(T event);
}

View File

@ -6,40 +6,44 @@ import java.lang.reflect.Array;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.function.Consumer;
public class EventManager { public class EventManager {
private HashMap<Class<? extends Event>, ArrayList<EventListener>> listeners = new HashMap<>(); private HashMap<Class<? extends Event>, ArrayList<Consumer>> listeners = new HashMap<>();
public EventManager() {} public EventManager() {}
public void registerEvent(Class<? extends Event> eventtype, EventListener listener) { public void registerEvent(Class<? extends Event> eventtype, Consumer handler) {
if (listener == null) { if (handler == null) {
throw new NullPointerException(); throw new NullPointerException();
} }
//get list //get list
ArrayList<EventListener> list = listeners.get(eventtype); ArrayList<Consumer> list = listeners.get(eventtype);
if (list == null) { if (list == null) {
list = new ArrayList<EventListener>(); //create and add list
list = new ArrayList<>();
listeners.put(eventtype, list); listeners.put(eventtype, list);
} else if(list.contains(listener)) { } else if(list.contains(handler)) {
throw new IllegalArgumentException("listener allready registered"); throw new IllegalArgumentException("listener allready registered");
} }
list.add(listener); list.add(handler); // ad to list
} }
public Event callEvent(Event e) { public Event callEvent(Event e) {
if(e == null) if(e == null)
throw new NullPointerException("event is not allowed to be null!"); throw new NullPointerException("event is not allowed to be null!");
ArrayList<EventListener> listner = listeners.get(e.getClass()); ArrayList<Consumer> listner = listeners.get(e.getClass());
for(EventListener listn : listner) { if(listner != null) {
try { for (Consumer listn : listner) {
listn.handleEvent(e); try {
} catch(Throwable t) { listn.accept(e);
System.err.println("Error occurred on Handling Event: " + e.getClass().getSimpleName()); } catch (Throwable t) {
t.printStackTrace(); System.err.println("Error occurred on Handling Event: " + e.getClass().getSimpleName());
t.printStackTrace();
}
} }
} }
return e; return e;

View File

@ -3,8 +3,6 @@ package de.mrbesen.test;
import java.util.Scanner; import java.util.Scanner;
import de.mrbesen.telegram.TelegramAPI; import de.mrbesen.telegram.TelegramAPI;
import de.mrbesen.telegram.event.EventListener;
import de.mrbesen.telegram.event.events.UserCallbackEvent;
import de.mrbesen.telegram.event.events.UserSendMessageEvent; import de.mrbesen.telegram.event.events.UserSendMessageEvent;
import de.mrbesen.telegram.objects.TMessage; import de.mrbesen.telegram.objects.TMessage;
import de.mrbesen.telegram.objects.TUser.Status; import de.mrbesen.telegram.objects.TUser.Status;
@ -13,7 +11,7 @@ import de.mrbesen.test.commands.ReplyKeyboardRemoveTC;
import de.mrbesen.test.commands.ReplyKeyboardTestCase; import de.mrbesen.test.commands.ReplyKeyboardTestCase;
import de.mrbesen.test.commands.SimpleTestCase; import de.mrbesen.test.commands.SimpleTestCase;
public class Main implements EventListener<UserSendMessageEvent>, Runnable { public class Main implements Runnable {
TelegramAPI api; TelegramAPI api;
private int action = 0; private int action = 0;
@ -30,10 +28,11 @@ public class Main implements EventListener<UserSendMessageEvent>, Runnable {
api.getCommandManager().registerCommand(new InlineKeyboardTC()); api.getCommandManager().registerCommand(new InlineKeyboardTC());
api.getCommandManager().registerCommand(new ReplyKeyboardTestCase()); api.getCommandManager().registerCommand(new ReplyKeyboardTestCase());
api.getCommandManager().registerCommand(new ReplyKeyboardRemoveTC()); api.getCommandManager().registerCommand(new ReplyKeyboardRemoveTC());
api.getEventManager().registerEvent(UserSendMessageEvent.class, this); api.getEventManager().registerEvent(UserSendMessageEvent.class, this::handleEvent);
} }
public void handleEvent(UserSendMessageEvent e) { public void handleEvent(Object event) {
UserSendMessageEvent e = (UserSendMessageEvent) event;
//api.sendMessage(new MessageBuilder().setText("this is a reply").setReciver(e.getUser().getID()).setSilent(true).setNoWebView(true).build()); //api.sendMessage(new MessageBuilder().setText("this is a reply").setReciver(e.getUser().getID()).setSilent(true).setNoWebView(true).build());
if(oldmsg != null) { if(oldmsg != null) {