+
+ @Override
+ public void handleCommand(
+ final Namespace ns, final MultiAccountManager c, final OutputWriter outputWriter
+ ) throws CommandException {
+ Shutdown.installHandler();
+ final var receiveMode = ns.<ReceiveMode>get("receive-mode");
+ final var receiveConfig = getReceiveConfig(ns);
+ c.getManagers().forEach(m -> m.setReceiveConfig(receiveConfig));
+ c.addOnManagerAddedHandler(m -> m.setReceiveConfig(receiveConfig));
+
+ final var jsonOutputWriter = (JsonWriter) outputWriter;
+ final var lineSupplier = getLineSupplier();
+
+ final var handler = new SignalJsonRpcDispatcherHandler(jsonOutputWriter,
+ lineSupplier,
+ receiveMode == ReceiveMode.MANUAL);
+ final var thread = Thread.currentThread();
+ Shutdown.registerShutdownListener(thread::interrupt);
+ handler.handleConnection(c);
+ }
+
+ private static Supplier<String> getLineSupplier() {
+ // Use FileChannel for stdin, because System.in is uninterruptible
+ final var stdInCh = Channels.newInputStream((new FileInputStream(FileDescriptor.in)).getChannel());
+ return IOUtils.getLineSupplier(new InputStreamReader(stdInCh, IOUtils.getConsoleCharset()));
+ }