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

45 lines
1.6 KiB
Java
Raw Normal View History

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
}