From a1e2e00c60af28966ad91a7ff4bbb6b1131e2b93 Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Fri, 15 Jan 2021 21:09:50 +0100 Subject: [PATCH] Return ok when executing "TdApi.Close", if already closed --- .../it/tdlight/common/InternalClient.java | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/main/java/it/tdlight/common/InternalClient.java b/src/main/java/it/tdlight/common/InternalClient.java index b973c7d..6973a92 100644 --- a/src/main/java/it/tdlight/common/InternalClient.java +++ b/src/main/java/it/tdlight/common/InternalClient.java @@ -1,5 +1,6 @@ package it.tdlight.common; +import it.tdlight.jni.TdApi; import it.tdlight.jni.TdApi.Error; import it.tdlight.jni.TdApi.Function; import it.tdlight.jni.TdApi.Object; @@ -132,7 +133,9 @@ public class InternalClient implements ClientEventsHandler, TelegramClient { @Override public void send(Function query, ResultHandler resultHandler, ExceptionHandler exceptionHandler) { - ensureOpen(); + if (isClosedAndMaybeThrow(query)) { + resultHandler.onResult(new TdApi.Ok()); + } long queryId = clientManager.getNextQueryId(); if (resultHandler != null) { handlers.put(queryId, new Handler(resultHandler, exceptionHandler)); @@ -142,13 +145,26 @@ public class InternalClient implements ClientEventsHandler, TelegramClient { @Override public Object execute(Function query) { - ensureOpen(); + if (isClosedAndMaybeThrow(query)) { + return new TdApi.Ok(); + } return NativeClientAccess.execute(query); } - private void ensureOpen() { - if (isClosed.get()) { - throw new IllegalStateException("The client is closed!"); + /** + * + * @param function function used to check if the check will be enforced or not. Can be null + * @return true if closed + */ + private boolean isClosedAndMaybeThrow(Function function) { + boolean closed = isClosed.get(); + if (closed) { + if (function != null && function.getConstructor() == TdApi.Close.CONSTRUCTOR) { + return true; + } else { + throw new IllegalStateException("The client is closed!"); + } } + return false; } }