From ad8d48ecb1ae95b201c7b743a8be6dd893884552 Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Sat, 6 Mar 2021 17:27:08 +0100 Subject: [PATCH] Filter out generated error messages during shutdown --- .../tdlight/common/InternalClientManager.java | 42 ++++++++++++++++--- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/src/main/java/it/tdlight/common/InternalClientManager.java b/src/main/java/it/tdlight/common/InternalClientManager.java index b665933..ce3dc46 100644 --- a/src/main/java/it/tdlight/common/InternalClientManager.java +++ b/src/main/java/it/tdlight/common/InternalClientManager.java @@ -1,6 +1,12 @@ package it.tdlight.common; import it.tdlight.jni.TdApi; +import it.tdlight.jni.TdApi.Object; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicReference; @@ -37,11 +43,15 @@ public class InternalClientManager implements AutoCloseable { if (handler != null) { handler.handleEvents(isClosed, clientEventIds, clientEvents); } else { - logger.error("Unknown client id \"{}\"! {} events have been dropped!", clientId, clientEvents.length); - for (int i = 0; i < clientEvents.length; i++) { - long id = clientEventIds[i]; - TdApi.Object event = clientEvents[i]; - logger.error("The following event, with id \"{}\", has been dropped: {}", id, event); + java.util.List> droppedEvents = getEffectivelyDroppedEvents(clientEventIds, clientEvents); + + if (!droppedEvents.isEmpty()) { + logger.error("Unknown client id \"{}\"! {} events have been dropped!", clientId, droppedEvents.size()); + for (Entry droppedEvent : droppedEvents) { + logger.error("The following event, with id \"{}\", has been dropped: {}", + droppedEvent.getKey(), + droppedEvent.getValue()); + } } } @@ -50,6 +60,28 @@ public class InternalClientManager implements AutoCloseable { } } + /** + * Get only events that have been dropped, ignoring synthetic errors related to the closure of a client + */ + private List> getEffectivelyDroppedEvents(long[] clientEventIds, TdApi.Object[] clientEvents) { + java.util.List> droppedEvents = new ArrayList<>(clientEvents.length); + for (int i = 0; i < clientEvents.length; i++) { + long id = clientEventIds[i]; + TdApi.Object event = clientEvents[i]; + boolean mustPrintError = true; + if (event instanceof TdApi.Error) { + var errorEvent = (TdApi.Error) event; + if (Objects.equals("Request aborted", errorEvent.message)) { + mustPrintError = false; + } + } + if (mustPrintError) { + droppedEvents.add(Map.entry(id, event)); + } + } + return droppedEvents; + } + public void registerClient(int clientId, ClientEventsHandler internalClient) { boolean replaced = registeredClientEventHandlers.put(clientId, internalClient) != null; if (replaced) {