+ final var isDbusSystem = Boolean.TRUE.equals(ns.getBoolean("dbus-system"));
+ if (isDbusSystem) {
+ runDbusMultiAccount(c, receiveMode != ReceiveMode.ON_START, true);
+ }
+ final var isDbusSession = Boolean.TRUE.equals(ns.getBoolean("dbus"));
+ if (isDbusSession || (
+ !isDbusSystem
+ && socketFile == null
+ && tcpAddress == null
+ && !(inheritedChannel instanceof ServerSocketChannel)
+ )) {
+ runDbusMultiAccount(c, receiveMode != ReceiveMode.ON_START, false);
+ }
+
+ synchronized (this) {
+ try {
+ wait();
+ } catch (InterruptedException ignored) {
+ }
+ }
+ }
+
+ private void addDefaultReceiveHandler(Manager m, OutputWriter outputWriter, final boolean isWeakListener) {
+ final var handler = outputWriter instanceof JsonWriter o
+ ? new JsonReceiveMessageHandler(m, o)
+ : outputWriter instanceof PlainTextWriter o
+ ? new ReceiveMessageHandler(m, o)
+ : Manager.ReceiveMessageHandler.EMPTY;
+ m.addReceiveHandler(handler, isWeakListener);
+ }
+
+ private void runSocketSingleAccount(
+ final Manager m, final ServerSocketChannel serverChannel, final boolean noReceiveOnStart
+ ) {
+ runSocket(serverChannel, channel -> {
+ final var handler = getSignalJsonRpcDispatcherHandler(channel, noReceiveOnStart);
+ handler.handleConnection(m);
+ });
+ }
+
+ private void runSocketMultiAccount(
+ final MultiAccountManager c, final ServerSocketChannel serverChannel, final boolean noReceiveOnStart
+ ) {
+ runSocket(serverChannel, channel -> {
+ final var handler = getSignalJsonRpcDispatcherHandler(channel, noReceiveOnStart);
+ handler.handleConnection(c);
+ });
+ }