protected DataApi create(RatpackDataServer.ContextHolder ctxHolder, String initData) { String textTermSessionId = ctxHolder.contextId; logger.debug("Creating terminal for textTermSessionId: {}", textTermSessionId); WebTextTerminal terminal = termTemplate.createCopy(); String mapKey = getSessionIdMapKey(textTermSessionId); terminal.setOnDispose(() -> { if(onDispose != null) { onDispose.accept(textTermSessionId); } Executors.newSingleThreadScheduledExecutor().schedule(() -> webTextTerminalCache.invalidate(mapKey), 5, TimeUnit.SECONDS); }); terminal.setOnAbort(() -> { if(onAbort != null) { onAbort.accept(textTermSessionId); } Executors.newSingleThreadScheduledExecutor().schedule(() -> webTextTerminalCache.invalidate(mapKey), 5, TimeUnit.SECONDS); }); webTextTerminalCache.put(mapKey, terminal); TextIO textIO = new TextIO(terminal); RunnerData runnerData = createRunnerData(initData, ctxHolder); Thread thread = new Thread(() -> textIoRunner.accept(textIO, runnerData)); thread.setDaemon(true); thread.start(); webTextTerminalCache.cleanUp(); return terminal; }
public InteractiveTerm() { terminal = new MarsTerminal(); terminal.init(); textIO = new TextIO(terminal); setUpArrows(); setUpESC(); }
protected WebTextTerminal create(SessionHolder sessionHolder, String initData) { String sessionId = sessionHolder.sessionId; Session session = sessionHolder.session; logger.debug("Creating terminal for sessionId: {}", sessionId); WebTextTerminal terminal = termTemplate.createCopy(); terminal.setOnDispose(() -> { if(onDispose != null) { onDispose.accept(sessionId); } Executors.newSingleThreadScheduledExecutor().schedule(() -> session.removeAttribute(getSessionIdAttribute(sessionId)), 5, TimeUnit.SECONDS); }); terminal.setOnAbort(() -> { if(onAbort != null) { onAbort.accept(sessionId); } Executors.newSingleThreadScheduledExecutor().schedule(() -> session.removeAttribute(getSessionIdAttribute(sessionId)), 5, TimeUnit.SECONDS); }); session.attribute(getSessionIdAttribute(sessionId), terminal); if(maxInactiveSeconds != null) { session.maxInactiveInterval(maxInactiveSeconds); } TextIO textIO = new TextIO(terminal); RunnerData runnerData = createRunnerData(initData, sessionHolder); Thread thread = new Thread(() -> textIoRunner.accept(textIO, runnerData)); thread.setDaemon(true); thread.start(); return terminal; }
private Holder() { TextTerminal<?> t = getTerminalFromProperty(); if(t == null) { t = getTerminalFromService(); } if(t == null) { t = getDefaultTerminal(); } t.init(); this.terminal = t; this.textIO = new TextIO(t); }
public static void main(String[] args) { SystemTextTerminal sysTerminal = new SystemTextTerminal(); TextIO sysTextIO = new TextIO(sysTerminal); BiConsumer<TextIO, RunnerData> app = chooseApp(sysTextIO); TextIO textIO = chooseTextIO(); // Uncomment the line below to ignore user interrupts. // textIO.getTextTerminal().registerUserInterruptHandler(term -> System.out.println("\n\t### User interrupt ignored."), false); if(textIO.getTextTerminal() instanceof WebTextTerminal) { WebTextTerminal webTextTerm = (WebTextTerminal)textIO.getTextTerminal(); TextIoApp<?> textIoApp = createTextIoApp(sysTextIO, app, webTextTerm); WebTextIoExecutor webTextIoExecutor = new WebTextIoExecutor(); configurePort(sysTextIO, webTextIoExecutor, 8080); webTextIoExecutor.execute(textIoApp); } else { app.accept(textIO, null); } }
public static void main(String[] args) { SwingTextTerminal terminal = new SwingTextTerminal(); terminal.init(); TextIO textIO = new TextIO(terminal);