package org.bensteele.jirrigate; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.Set; import java.util.TreeSet; import jline.console.ConsoleReader; import jline.console.completer.StringsCompleter; public class TelnetServer implements Runnable { private final int serverPort; public TelnetServer(int port) { this.serverPort = port; } @Override public void run() { ServerSocket serverSocket = null; try { serverSocket = new ServerSocket(this.serverPort); } catch (IOException e) { throw new RuntimeException("ERROR: Cannot open port " + serverPort, e); } while (true) { Socket clientSocket = null; try { clientSocket = serverSocket.accept(); processClientRequest(clientSocket); } catch (IOException e) { // TODO: log } } } private void processClientRequest(Socket clientSocket) throws IOException { ConsoleReader reader = new ConsoleReader(clientSocket.getInputStream(), clientSocket.getOutputStream()); reader.setPrompt("jirrigate> "); // test auto-complete Set<String> commands = new TreeSet<String>(); commands.add("show controller all info"); commands.add("show controller all status"); reader.addCompleter(new StringsCompleter(commands)); String line; while ((line = reader.readLine()) != null) { if (line.equalsIgnoreCase("quit") || line.equalsIgnoreCase("exit")) { break; } } clientSocket.close(); } }