processHandler(process -> { long id = process.vertx().setPeriodic(500, id_ -> { StringBuilder buf = new StringBuilder(); Formatter formatter = new Formatter(buf); for (int i = 1; i <= process.height(); i++) { process.write(buf.toString()); }); process.interruptHandler(v -> { vertx.cancelTimer(id); process.end(); });
URL url; try { url = new URL(process.commandLine().getArgumentValue(0)); } catch (MalformedURLException e) { process.write("Bad url\n").end(); return; HttpClient client = process.vertx().createHttpClient(); process.write("Connecting to " + url + "\n"); int port = url.getPort(); if (port == -1) { process.write("wget: error " + err.getMessage() + "\n"); process.end(); }); req.handler(resp -> { process.write(resp.statusCode() + " " + resp.statusMessage() + "\n"); String contentType = resp.getHeader("Content-Type"); String contentLength = resp.getHeader("Content-Length"); process.write("Length: " + (contentLength != null ? contentLength : "unspecified")); if (contentType != null) { process.write("[" + contentType + "]"); process.write("\n"); process.end(); }); req.end();
@Override public void start() throws Exception { Command starwars = CommandBuilder.command("echokeyboard"). processHandler(process -> { // Echo process.stdinHandler(keys -> { process.write(keys.replace('\r', '\n')); }); // Terminate when user hits Ctrl-C process.interruptHandler(v -> { process.end(); }); }).build(vertx); ShellService service = ShellService.create(vertx, new ShellServiceOptions().setTelnetOptions( new TelnetTermOptions().setHost("localhost").setPort(3000) )); CommandRegistry.getShared(vertx).registerCommand(starwars); service.start(ar -> { if (!ar.succeeded()) { ar.cause().printStackTrace(); } }); } }
@Override public void process(CommandProcess process) { process.vertx().undeploy(id, ar -> { if (ar.succeeded()) { process.write("Undeployed " + id + "\n").end(); } else { process.write("Could not undeploy " + id + "\n"); StringWriter buffer = new StringWriter(); PrintWriter writer = new PrintWriter(buffer); ar.cause().printStackTrace(writer); process.write(buffer.toString()).end(); } }); } }
@Override public void testExec(TestContext context) throws Exception { AtomicReference<Vertx> execCommand = new AtomicReference<>(); CommandRegistry registry = CommandRegistry.getShared(vertx); registry.registerCommand(CommandBuilder.command("the-command").processHandler(process -> { context.assertNotNull(Vertx.currentContext()); context.assertNotNull(process.session()); execCommand.set(process.vertx()); context.assertEquals(-1, process.width()); context.assertEquals(-1, process.height()); context.assertEquals(Arrays.asList("arg1", "arg2"), process.args()); context.assertTrue(process.isForeground()); StringBuilder input = new StringBuilder(); process.stdinHandler(data -> { input.append(data); if (input.toString().equals("the_input")) { process.end(2); } }); process.write("the_output"); }).build(vertx)); super.testExec(context); assertEquals(execCommand.get(), vertx); } }
private void scheduleSleep(CommandProcess process, long millis) { Vertx vertx = process.vertx(); if (millis > 0) { long now = System.currentTimeMillis(); AtomicLong remaining = new AtomicLong(-1); long id = process.vertx().setTimer(millis, v -> { process.end(); }); process.suspendHandler(v -> { vertx.cancelTimer(id); remaining.set(millis - (System.currentTimeMillis() - now)); }); process.resumeHandler(v -> { scheduleSleep(process, remaining.get()); }); process.interruptHandler(v -> { process.end(); }); process.endHandler(v -> { vertx.cancelTimer(id); }); } else { process.end(); } } }
process.stdinHandler(line -> { process.write("-> " + line + "\n"); }); process.interruptHandler(v -> process.end()); }); mgr.registerCommand(echoKeyboardCmd.build(vertx)); process.write("[" + process.width() + "," + process.height() + "]\n"); process.resizehandler(v -> { process.write("[" + process.width() + "," + process.height() + "]\n"); }); process.interruptHandler(v -> { process.end(); }); }); process.write("\u20AC").end(); }); mgr.registerCommand(charsetTestCmd.build(vertx));
Async latch3 = context.async(); commands.add(CommandBuilder.command("read").processHandler(process -> { process.stdinHandler(line -> { context.fail("Should not process line " + line); }); process.suspendHandler(v -> { try { process.write(""); context.fail(); } catch (IllegalStateException ignore) { process.suspendHandler(v -> { process.end(0); }); }));
commands.add(CommandBuilder.command("foo").processHandler(process -> { Job job = shell.jobController().getJob(1); context.assertTrue(process.isForeground()); process.suspendHandler(v -> { context.assertFalse(process.isForeground()); context.assertEquals(0L, latch1.getCount()); try { process.write(""); context.fail(); } catch (IllegalStateException ignore) { process.resumeHandler(v -> { context.assertTrue(process.isForeground()); context.assertEquals(0L, latch2.getCount()); context.assertEquals(ExecStatus.RUNNING, job.status()); process.write(""); context.assertEquals(job, shell.jobController().foregroundJob()); conn.out().setLength(0); process.write("resumed"); latch3.countDown(); }); process.stdinHandler(txt -> { context.assertEquals(0L, latch3.getCount()); context.assertEquals("hello", txt);
command("foo"). processHandler(process -> { process.stdinHandler(cp -> { context.fail(); }); process.endHandler(v -> { barLatch.complete(); process.end(); }). build(vertx)); command("bar"). processHandler(process -> { process.endHandler(v -> { endLatch.complete(); }); process.end(); }). build(vertx));
Async async = context.async(); commands.add(CommandBuilder.command("foo").processHandler(process -> { process.suspendHandler(v -> { context.assertFalse(process.isForeground()); context.assertEquals(1, latch2.count()); latch2.countDown(); }); process.resumeHandler(v -> { context.assertFalse(process.isForeground()); }); process.foregroundHandler(v -> { context.assertTrue(process.isForeground()); latch3.countDown(); }); process.stdinHandler(line -> { async.complete(); });
@Test public void testResize(TestContext context) { commands.add(CommandBuilder.command("foo").processHandler(process -> { context.assertEquals(20, process.width()); context.assertEquals(10, process.height()); process.resizehandler(v -> { context.assertEquals(25, process.width()); context.assertEquals(15, process.height()); process.end(0); }); process.write("ping"); })); Shell shell = server.createShell(); Job job = shell.createJob("foo"); Pty pty = Pty.create(); Async async = context.async(); pty.setSize(20, 10); pty.stdoutHandler(text -> { pty.setSize(25, 15); }); job.setTty(pty.slave()).statusUpdateHandler(CommandProcessTest.terminateHandler(status -> { async.complete(); })).run(); }
/** * End the process. * @param status the exit status. */ public void end(int status) { delegate.end(status); }
@Override public void start() throws Exception { Command helloWorld = CommandBuilder.command("hello-world"). processHandler(process -> { process.write("hello world\n"); process.end(); }).build(vertx); ShellService service = ShellService.create(vertx, new ShellServiceOptions().setTelnetOptions( new TelnetTermOptions().setHost("localhost").setPort(3000) )); CommandRegistry.getShared(vertx).registerCommand(helloWorld); service.start(ar -> { if (!ar.succeeded()) { ar.cause().printStackTrace(); } }); } }
cmdProcess.set(process); cmdContext.set(Vertx.currentContext()); process.suspendHandler(v -> fooSusp.complete()); process.resumeHandler(v -> fooResumed.complete()); process.endHandler(v -> { endLatch.complete(); }); fooResumed.awaitSuccess(2000); cmdContext.get().runOnContext(v -> { cmdProcess.get().end(); }); long now = System.currentTimeMillis();
@Test public void testSessionGet(TestContext context) throws Exception { Async async = context.async(); commands.add(CommandBuilder.command("foo").processHandler(process -> { Session session = process.session(); context.assertNotNull(session); context.assertEquals("the_value", session.get("the_key")); process.end(); })); Shell shell = server.createShell(); Job job = shell.createJob("foo"); Session session = new SessionImpl(); session.put("the_key", "the_value"); Pty pty = Pty.create(); job.setSession(session).setTty(pty.slave()).statusUpdateHandler(CommandProcessTest.terminateHandler(status -> { context.assertEquals(0, job.process().exitCode()); async.complete(); })).run(); }