public Screencaster(Robot robot, TtyConnection conn) { this.robot = robot; this.conn = conn; conn.setEventHandler((event, key) -> interrupted = true); }
public Screencaster(Robot robot, TtyConnection conn) { this.robot = robot; this.conn = conn; conn.setEventHandler((event, key) -> interrupted = true); }
@Override public void run() { // Subscribe to events, in particular Ctrl-C conn.setEventHandler(this); running = true; try { command.execute(conn, args); } catch (InterruptedException e) { // Ctlr-C interrupt } catch (Exception e) { e.printStackTrace(); } finally { running = false; conn.setEventHandler(null); // Readline again read(conn, readline); } } }
@Override public void run() { // Subscribe to events, in particular Ctrl-C conn.setEventHandler(this); running = true; try { command.execute(conn, args); } catch (InterruptedException e) { // Ctlr-C interrupt } catch (Exception e) { e.printStackTrace(); } finally { running = false; conn.setEventHandler(null); // Readline again read(conn, readline); } } }
private void doneHandler(TtyConnection conn, Readline readline) { conn.setEventHandler(null); conn.execute(() -> read(conn, readline)); }
private void doneHandler(TtyConnection conn, Readline readline) { conn.setEventHandler(null); conn.execute(() -> read(conn, readline)); }
/** * 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(TtyConnection conn) { conn.setEventHandler((event, key) -> { if (event == TtyEvent.INTR) { interrupted = true; } }); if (conn.size() != null) { run(conn); } else { conn.setSizeHandler(size -> run(conn)); } }
@Override public void accept(TtyConnection conn) { conn.setEventHandler((event, key) -> { if (event == TtyEvent.INTR) { interrupted = true; } }); if (conn.size() != null) { run(conn); } else { conn.setSizeHandler(size -> run(conn)); } }
private void onNewLine(TtyConnection conn, Readline readline, String line) { if (processStdinListener != null) { processStdinListener.accept(line); } if (line == null) { conn.close(); return; } PtyMaster task = new PtyMaster(line, buffer -> onStdOut(conn, buffer), empty -> doneHandler(conn, readline)); conn.setEventHandler((event,cp) -> { if (event == TtyEvent.INTR) { task.interruptProcess(); } }); if (processListener != null) { processListener.accept(task); } task.start(); }
private void onNewLine(TtyConnection conn, Readline readline, String line) { if (processStdinListener != null) { processStdinListener.accept(line); } if (line == null) { conn.close(); return; } PtyMaster task = new PtyMaster(line, buffer -> onStdOut(conn, buffer), empty -> doneHandler(conn, readline)); conn.setEventHandler((event,cp) -> { if (event == TtyEvent.INTR) { task.interruptProcess(); } }); if (processListener != null) { processListener.accept(task); } task.start(); }
conn.setEventHandler(new BiConsumer<TtyEvent, Integer>() { @Override public void accept(TtyEvent event, Integer cp) {
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); } }
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); } }
Helper.appendCodePoints(event, buffer); }); conn.setEventHandler((event, cp) -> { if (event == TtyEvent.INTR) { switch (count.get()) {
@Test public void testSignals() throws Exception { StringBuilder buffer = new StringBuilder(); AtomicInteger count = new AtomicInteger(); server(conn -> { conn.setStdinHandler(event -> Helper.appendCodePoints(event, buffer)); conn.setEventHandler((event, cp) -> { switch (count.get()) { case 0: assertEquals(TtyEvent.INTR, event); count.set(1); break; case 1: assertEquals(TtyEvent.EOF, event); count.set(2); break; case 2: assertEquals(TtyEvent.SUSP, event); count.set(3); testComplete(); break; default: fail("Not expected"); } }); }); assertConnect(); assertWrite(3, 4, 26); await(); }
@Test public void testSignals() throws Exception { StringBuilder buffer = new StringBuilder(); AtomicInteger count = new AtomicInteger(); server(conn -> { conn.setStdinHandler(event -> Helper.appendCodePoints(event, buffer)); conn.setEventHandler((event, cp) -> { switch (count.get()) { case 0: assertEquals(TtyEvent.INTR, event); count.set(1); break; case 1: assertEquals(TtyEvent.EOF, event); count.set(2); break; case 2: assertEquals(TtyEvent.SUSP, event); count.set(3); testComplete(); break; default: fail("Not expected"); } }); }); assertConnect(); assertWrite(3, 4, 26); await(); }
public static void handle(TtyConnection conn) { conn.setEventHandler((event, key) -> { switch (event) { case INTR: conn.write("You did a Ctrl-C\n"); break; case SUSP: conn.write("You did a Ctrl-Z\n"); break; case EOF: conn.write("You did a Ctrl-D: closing\n"); conn.close(); break; } }); conn.setSizeHandler(size -> { conn.write("You resized your terminal to " + size + "\n"); }); conn.setTerminalTypeHandler(term -> { conn.write("Your terminal is " + term + "\n"); }); conn.setStdinHandler(keys -> { for (int key : keys) { conn.write("You typed " + key + "\n"); } }); }
public static void handle(TtyConnection conn) { conn.setEventHandler((event, key) -> { switch (event) { case INTR: conn.write("You did a Ctrl-C\n"); break; case SUSP: conn.write("You did a Ctrl-Z\n"); break; case EOF: conn.write("You did a Ctrl-D: closing\n"); conn.close(); break; } }); conn.setSizeHandler(size -> { conn.write("You resized your terminal to " + size + "\n"); }); conn.setTerminalTypeHandler(term -> { conn.write("Your terminal is " + term + "\n"); }); conn.setStdinHandler(keys -> { for (int key : keys) { conn.write("You typed " + key + "\n"); } }); }