public void cancel() { ShellProcess process = current.get(); if (process != null) { process.cancel(); } else { writer.println(); writer.print(getPrompt()); writer.flush(); } }
public void run() { // String welcome = shell.getWelcome(); writer.println(welcome); writer.flush(); // while (true) { String prompt = getPrompt(); String line; try { writer.println(); writer.flush(); if ((line = reader.readLine(prompt)) == null) { break; } } catch (IOException e) { // What should we do other than that ? break; } // ShellProcess process = shell.createProcess(line); JLineProcessContext context = new JLineProcessContext(this); current.set(process); try { process.execute(context); try { context.latch.await(); } catch (InterruptedException ignore) { // At the moment } } finally { current.set(null); } ShellResponse response = context.resp.get(); // if (response instanceof ShellResponse.Cancelled) { // Do nothing } else if (response instanceof ShellResponse.Close) { break; } else { response.getReader().writeAnsiTo(writer); writer.flush(); } } }
public void cancel() { // Construcuted -> ISE // Evaluating -> Canceled // Queued -> Canceled // Cancelled -> Cancelled // Terminated -> Terminated boolean cancel; synchronized (lock) { switch (status) { case CONSTRUCTED: throw new IllegalStateException( "Cannot call cancel on process that was not scheduled for execution yet"); case QUEUED: status = Status.CANCELED; cancel = false; break; case EVALUATING: status = Status.CANCELED; cancel = true; break; default: cancel = false; break; } } // if (cancel) { callee.cancel(); } }