2021-04-07 20:41:23 +02:00
|
|
|
package it.tdlight.tdnative;
|
2020-10-10 03:26:24 +02:00
|
|
|
|
2021-04-07 21:50:31 +02:00
|
|
|
import it.tdlight.jni.TdApi;
|
2020-10-12 18:46:42 +02:00
|
|
|
import java.util.function.Consumer;
|
2021-10-22 10:11:49 +02:00
|
|
|
import java.util.concurrent.atomic.AtomicReference;
|
2020-10-12 18:46:42 +02:00
|
|
|
|
2020-10-10 03:26:24 +02:00
|
|
|
/**
|
|
|
|
* Class used for managing internal TDLib logging.
|
|
|
|
*/
|
|
|
|
public class NativeLog {
|
|
|
|
|
2021-10-22 10:11:49 +02:00
|
|
|
private static final Consumer<String> defaultFatalErrorCallback = NativeLog::printFatalError;
|
|
|
|
private static final AtomicReference<Consumer<String>> fatalErrorCallback
|
|
|
|
= new AtomicReference<>(defaultFatalErrorCallback);
|
2020-10-10 03:26:24 +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.
|
|
|
|
*
|
|
|
|
* @param errorMessage Error message.
|
|
|
|
*/
|
2021-10-22 10:11:49 +02:00
|
|
|
private static void onFatalError(String errorMessage) {
|
|
|
|
new Thread(() -> NativeLog.fatalErrorCallback.get().accept(errorMessage)).start();
|
2020-10-10 03:26:24 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2021-10-22 10:11:49 +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.
|
2020-10-10 03:26:24 +02:00
|
|
|
*/
|
2021-10-22 10:11:49 +02:00
|
|
|
public static void setFatalErrorCallback(Consumer<String> fatalErrorCallback) {
|
|
|
|
if (fatalErrorCallback == null) {
|
|
|
|
fatalErrorCallback = defaultFatalErrorCallback;
|
|
|
|
}
|
|
|
|
NativeLog.fatalErrorCallback.set(fatalErrorCallback);
|
2020-10-10 03:26:24 +02:00
|
|
|
}
|
2021-10-22 10:11:49 +02:00
|
|
|
|
|
|
|
private static void printFatalError(String errorMessage) {
|
|
|
|
System.err.println("TDLib fatal error: " + errorMessage);
|
|
|
|
}
|
2020-10-10 03:26:24 +02:00
|
|
|
}
|