@Override public Tty stdinHandler(Handler<String> handler) { if (handler != null) { conn.setStdinHandler(codePoints -> { handler.handle(io.termd.core.util.Helper.fromCodePoints(codePoints)); }); } else { conn.setStdinHandler(null); } return this; }
@Override public void execute(TtyConnection conn, List<String> args) throws Exception { // Subscribe to key events and print them conn.setStdinHandler(keys -> { for (int key : keys) { conn.write(key + " pressed\n"); } }); try { // Wait until interrupted new CountDownLatch(1).await(); } finally { conn.setStdinHandler(null); } } },
@Override public void execute(TtyConnection conn, List<String> args) throws Exception { // Subscribe to key events and print them conn.setStdinHandler(keys -> { for (int key : keys) { conn.write(key + " pressed\n"); } }); try { // Wait until interrupted new CountDownLatch(1).await(); } finally { conn.setStdinHandler(null); } } },
@Override public void accept(final TtyConnection conn) { conn.setStdinHandler(new Consumer<int[]>() { @Override public void accept(int[] bytes) { conn.close(25); } }); } });
@Override public void accept(final TtyConnection conn) { conn.setStdinHandler(new Consumer<int[]>() { @Override public void accept(int[] data) { queue.add(data); conn.stdoutHandler().accept(new int[]{'h', 'e', 'l', 'l', 'o'}); } }); } });
@Override public Term stdinHandler(Handler<String> handler) { if (inReadline) { throw new IllegalStateException(); } stdinHandler = handler; if (handler != null) { conn.setStdinHandler(codePoints -> { handler.handle(Helper.fromCodePoints(codePoints)); }); checkPending(); } else { conn.setStdinHandler(echoHandler); } return this; }
/** * End the current interaction with a callback. * * @param s the */ private boolean end(String s) { synchronized (Readline.this) { if (interaction == null) { return false; } interaction = null; conn.setStdinHandler(prevReadHandler); conn.setSizeHandler(prevSizeHandler); conn.setEventHandler(prevEventHandler); } requestHandler.accept(s); return true; }
/** * End the current interaction with a callback. * * @param s the */ private boolean end(String s) { synchronized (Readline.this) { if (interaction == null) { return false; } interaction = null; conn.setStdinHandler(prevReadHandler); conn.setSizeHandler(prevSizeHandler); conn.setEventHandler(prevEventHandler); } requestHandler.accept(s); return true; }
@Override public void accept(final TtyConnection conn) { conn.setStdinHandler(new Consumer<int[]>() { @Override public void accept(int[] bytes) { conn.close(); } }); conn.setCloseHandler(new Consumer<Void>() { @Override public void accept(Void v) { closedLatch.countDown(); } }); } });
@Override public void accept(final TtyConnection conn) { conn.setCloseHandler(new Consumer<Void>() { @Override public void accept(Void v) { if (closeCount.incrementAndGet() > 1) { fail("Closed call several times"); } else { testComplete(); } } }); conn.setStdinHandler(new Consumer<int[]>() { @Override public void accept(int[] text) { conn.close(); } }); } });
@Override public void accept(final TtyConnection conn) { assertTrue(conn.lastAccessedTime() >= connTime); final long openTime = System.currentTimeMillis(); conn.setStdinHandler(new Consumer<int[]>() { @Override public void accept(int[] cp) { long delta = conn.lastAccessedTime() - openTime; switch (count.getAndIncrement()) { case 0: assertTrue(delta >= 0); latch.countDown(); break; case 1: assertTrue(delta >= 10); testComplete(); break; } } }); } });
@Test public void testServerDisconnect() throws Exception { CountDownLatch closedLatch = new CountDownLatch(1); server(conn -> { conn.setStdinHandler(bytes -> { conn.close(); }); conn.setCloseHandler(v -> { closedLatch.countDown(); }); }); assertConnect(); assertWrite("whatever"); assertTrue(closedLatch.await(10, TimeUnit.SECONDS)); }
@Test public void testRead() throws Exception { final ArrayBlockingQueue<int[]> queue = new ArrayBlockingQueue<>(1); server(conn -> conn.setStdinHandler(data -> { queue.add(data); conn.stdoutHandler().accept(new int[]{'h', 'e', 'l', 'l', 'o'}); })); assertConnect(); assertWriteln(""); int[] data = queue.poll(10, TimeUnit.SECONDS); assertTrue(Arrays.equals(new int[]{'\r'}, data)); assertEquals("hello", assertReadString(5)); }
@Test public void testRead() throws Exception { final ArrayBlockingQueue<int[]> queue = new ArrayBlockingQueue<>(1); server(conn -> conn.setStdinHandler(data -> { queue.add(data); conn.stdoutHandler().accept(new int[]{'h', 'e', 'l', 'l', 'o'}); })); assertConnect(); assertWriteln(""); int[] data = queue.poll(10, TimeUnit.SECONDS); assertTrue(Arrays.equals(new int[]{'\r'}, data)); assertEquals("hello", assertReadString(5)); }
@Test public void testServerDisconnect() throws Exception { CountDownLatch closedLatch = new CountDownLatch(1); server(conn -> { conn.setStdinHandler(bytes -> { conn.close(); }); conn.setCloseHandler(v -> { closedLatch.countDown(); }); }); assertConnect(); assertWrite("whatever"); assertTrue(closedLatch.await(10, TimeUnit.SECONDS)); }
private void install() { prevReadHandler = conn.getStdinHandler(); prevSizeHandler = conn.getSizeHandler(); prevEventHandler = conn.getEventHandler(); conn.setStdinHandler(data -> { synchronized (Readline.this) { decoder.append(data); } deliver(); }); size = conn.size(); conn.setSizeHandler(dim -> { if (size != null) { // Not supported for now // interaction.resize(size.width(), dim.width()); } size = dim; }); conn.setEventHandler(null); } }
@Test public void testExitCode() throws Exception { server(conn -> { conn.setStdinHandler(bytes -> { conn.close(25); }); }); assertConnect(); assertWrite("whatever"); long timeout = System.currentTimeMillis() + 5000; while (!channel.isClosed()) { assertTrue(System.currentTimeMillis() < timeout); Thread.sleep(10); } assertEquals(25, channel.getExitStatus()); }
@Test public void testExitCode() throws Exception { server(conn -> { conn.setStdinHandler(bytes -> { conn.close(25); }); }); assertConnect(); assertWrite("whatever"); long timeout = System.currentTimeMillis() + 5000; while (!channel.isClosed()) { assertTrue(System.currentTimeMillis() < timeout); Thread.sleep(10); } assertEquals(25, channel.getExitStatus()); }
@Test public void testConnectionClose() throws Exception { AtomicInteger closeCount = new AtomicInteger(); server(conn -> { conn.setCloseHandler(v -> { if (closeCount.incrementAndGet() > 1) { fail("Closed call several times"); } else { testComplete(); } }); conn.setStdinHandler(text -> conn.close()); }); assertConnect(); assertWrite("bye"); await(); }
@Test public void testConnectionClose() throws Exception { AtomicInteger closeCount = new AtomicInteger(); server(conn -> { conn.setCloseHandler(v -> { if (closeCount.incrementAndGet() > 1) { fail("Closed call several times"); } else { testComplete(); } }); conn.setStdinHandler(text -> conn.close()); }); assertConnect(); assertWrite("bye"); await(); }