tdlight-java/src/main/java/it/tdlight/tdnative/NativeLog.java

45 lines
1.5 KiB
Java
Raw Normal View History

2021-04-07 19:48:10 +02:00
package it.tdlight.tdnative;
2018-07-18 12:24:37 +02:00
2021-04-07 21:55:08 +02:00
import it.tdlight.jni.TdApi;
2020-10-12 18:48:49 +02:00
import java.util.function.Consumer;
2021-10-22 19:53:23 +02:00
import java.util.concurrent.atomic.AtomicReference;
2020-10-12 18:48:49 +02:00
2020-09-08 16:23:46 +02:00
/**
2021-10-22 19:53:23 +02:00
* Class used for managing internal TDLib logging.
2020-09-08 16:23:46 +02:00
*/
2020-08-18 23:13:36 +02:00
public class NativeLog {
2018-07-18 12:24:37 +02:00
2021-10-22 19:53:23 +02:00
private static final Consumer<String> defaultFatalErrorCallback = NativeLog::printFatalError;
private static final AtomicReference<Consumer<String>> fatalErrorCallback
= new AtomicReference<>(defaultFatalErrorCallback);
2020-09-08 16:23:46 +02:00
2021-09-27 19:27:13 +02:00
/**
2021-10-22 19:53:23 +02:00
* This function is called from the JNI when a fatal error happens to provide a better error message.
* The function does not return.
2021-09-27 19:27:13 +02:00
*
* @param errorMessage Error message.
*/
2021-10-22 19:53:23 +02:00
private static void onFatalError(String errorMessage) {
new Thread(() -> NativeLog.fatalErrorCallback.get().accept(errorMessage)).start();
2021-09-27 19:27:13 +02:00
}
2020-09-08 16:23:46 +02:00
2021-09-27 19:27:13 +02:00
/**
2021-10-22 19:53:23 +02:00
* Sets the callback that will be called when a fatal error happens.
* None of the TDLib methods can be called from the callback.
* TDLib will crash as soon as the callback returns.
* By default the callback set to print in stderr.
* @param fatalErrorCallback Callback that will be called when a fatal error happens.
* Pass null to restore default callback.
2021-09-27 19:27:13 +02:00
*/
2021-10-22 19:53:23 +02:00
public static void setFatalErrorCallback(Consumer<String> fatalErrorCallback) {
2021-09-27 19:27:13 +02:00
if (fatalErrorCallback == null) {
2021-10-22 19:53:23 +02:00
fatalErrorCallback = defaultFatalErrorCallback;
2021-09-27 19:27:13 +02:00
}
2021-10-22 19:53:23 +02:00
NativeLog.fatalErrorCallback.set(fatalErrorCallback);
}
private static void printFatalError(String errorMessage) {
System.err.println("TDLib fatal error: " + errorMessage);
2021-09-27 19:27:13 +02:00
}
2018-07-18 12:24:37 +02:00
}