package org.asamk.signal;
+import org.asamk.signal.commands.exceptions.CommandException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Shutdown {
private static final Logger logger = LoggerFactory.getLogger(Shutdown.class);
- private static final CompletableFuture<Void> shutdown = new CompletableFuture<>();
+ private static final CompletableFuture<Object> shutdown = new CompletableFuture<>();
private static final CompletableFuture<Void> shutdownComplete = new CompletableFuture<>();
private static boolean initialized = false;
shutdown.complete(null);
}
- public static void waitForShutdown() throws InterruptedException {
+ public static void triggerShutdown(CommandException exception) {
+ logger.debug("Triggering shutdown with exception.", exception);
+ shutdown.complete(exception);
+ }
+
+ public static void waitForShutdown() throws InterruptedException, CommandException {
try {
- shutdown.get();
+ final var result = shutdown.get();
+ if (result instanceof CommandException e) {
+ throw e;
+ }
} catch (ExecutionException e) {
throw new RuntimeException(e);
}
final OutputWriter outputWriter
) throws CommandException {
Shutdown.installHandler();
- logger.info("Starting daemon in single-account mode for " + m.getSelfNumber());
+ logger.info("Starting daemon in single-account mode for {}", m.getSelfNumber());
final var noReceiveStdOut = Boolean.TRUE.equals(ns.getBoolean("no-receive-stdout"));
final var receiveMode = ns.<ReceiveMode>get("receive-mode");
final var receiveConfig = getReceiveConfig(ns);