fixed nullpointerexception, eventsystem improved, shutdownhook

This commit is contained in:
mrbesen 2020-06-13 20:21:55 +02:00
parent 545e328b07
commit 9f7829b28a
Signed by: MrBesen
GPG Key ID: 596B2350DCD67504
2 changed files with 13 additions and 7 deletions

View File

@ -111,7 +111,10 @@ public class TelegramAPI implements Runnable {
thread.start();
} else {
throw new IllegalStateException("Still Running.");
}
}
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
stop();
}, "TelegramAPI Shutdown Hook"));
}
public void addAdmin(long admin) {
@ -151,12 +154,13 @@ public class TelegramAPI implements Runnable {
if(con.getResponseCode() == 200) {
return new JSONObject(readfromIS(con.getInputStream()));
} else {
System.out.println("request " + request + " " + parameter);
String errdesc = "[No description available]";
try {
//try to read error message
JSONObject returned = new JSONObject(readfromIS(con.getErrorStream()));
errdesc = returned.getString("description");
} catch(Throwable ignore) { }
} catch(Throwable ignore) { }
throw new APIError(parameter, request, con.getResponseCode(), null, errdesc);
//throw new IOException("API request returned HTTP " + con.getResponseCode() + " (" + con.getResponseMessage() + ") for action " + request + "\nurl: " + url.toString() + "\nparams: " + parameter + "\nerror description: " + errdesc);
}
@ -289,6 +293,9 @@ public class TelegramAPI implements Runnable {
public void stop() {
run = false;
log.log("tapi stoped.");
if(thread == null) return;
thread.interrupt();
Thread.yield();//try to not get into that loop
while(isRunning()) {
@ -298,7 +305,6 @@ public class TelegramAPI implements Runnable {
Thread.sleep(10);
} catch(InterruptedException e) {}
}
log.log("tapi stoped.");
thread = null;
}

View File

@ -6,17 +6,17 @@ import java.util.function.Consumer;
public class EventManager {
private HashMap<Class<? extends Event>, ArrayList<Consumer>> listeners = new HashMap<>();
private HashMap<Class<? extends Event>, ArrayList<Consumer<? super Event>>> listeners = new HashMap<>();
public EventManager() {}
public void registerEvent(Class<? extends Event> eventtype, Consumer handler) {
public void registerEvent(Class<? extends Event> eventtype, Consumer<? super Event> handler) {
if (handler == null) {
throw new NullPointerException();
}
//get list
ArrayList<Consumer> list = listeners.get(eventtype);
ArrayList<Consumer<? super Event>> list = listeners.get(eventtype);
if (list == null) {
//create and add list
list = new ArrayList<>();
@ -31,7 +31,7 @@ public class EventManager {
public Event callEvent(Event e) {
if(e == null) return e;
ArrayList<Consumer> listner = listeners.get(e.getClass());
ArrayList<Consumer<? super Event>> listner = listeners.get(e.getClass());
if(listner != null) {
for (Consumer listn : listner) {
try {