import net.sourceforge.argparse4j.inf.Subparser;
import org.asamk.signal.DbusConfig;
-import org.asamk.signal.JsonReceiveMessageHandler;
-import org.asamk.signal.JsonWriter;
-import org.asamk.signal.JsonWriterImpl;
import org.asamk.signal.OutputType;
-import org.asamk.signal.OutputWriter;
-import org.asamk.signal.PlainTextWriter;
import org.asamk.signal.ReceiveMessageHandler;
import org.asamk.signal.commands.exceptions.CommandException;
import org.asamk.signal.commands.exceptions.IOErrorException;
import org.asamk.signal.commands.exceptions.UnexpectedErrorException;
import org.asamk.signal.dbus.DbusSignalControlImpl;
import org.asamk.signal.dbus.DbusSignalImpl;
+import org.asamk.signal.json.JsonReceiveMessageHandler;
import org.asamk.signal.jsonrpc.SignalJsonRpcDispatcherHandler;
import org.asamk.signal.manager.Manager;
import org.asamk.signal.manager.MultiAccountManager;
+import org.asamk.signal.output.JsonWriter;
+import org.asamk.signal.output.JsonWriterImpl;
+import org.asamk.signal.output.OutputWriter;
+import org.asamk.signal.output.PlainTextWriter;
import org.asamk.signal.util.IOUtils;
import org.freedesktop.dbus.connections.impl.DBusConnection;
import org.freedesktop.dbus.exceptions.DBusException;
runDbusSingleAccount(m, false, receiveMode != ReceiveMode.ON_START);
}
+ m.addClosedListener(() -> {
+ synchronized (this) {
+ notifyAll();
+ }
+ });
+
synchronized (this) {
try {
wait();
}
private void runSocket(final ServerSocketChannel serverChannel, Consumer<SocketChannel> socketHandler) {
- final var mainThread = Thread.currentThread();
new Thread(() -> {
while (true) {
final SocketChannel channel;
logger.info("Accepted new client: " + clientString);
} catch (IOException e) {
logger.error("Failed to accept new socket connection", e);
- mainThread.notifyAll();
+ synchronized (this) {
+ notifyAll();
+ }
break;
}
new Thread(() -> {
}
}
});
+ c.addOnManagerRemovedHandler(m -> {
+ final var path = DbusConfig.getObjectPath(m.getSelfNumber());
+ try {
+ final var object = connection.getExportedObject(null, path);
+ if (object instanceof DbusSignalImpl dbusSignal) {
+ dbusSignal.close();
+ }
+ } catch (DBusException ignored) {
+ }
+ connection.unExportObject(path);
+ });
final var initThreads = c.getAccountNumbers()
.stream()