package com.saffrontech.vertx.util;
import com.saffrontech.vertx.EventBusBridge;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.URI;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.function.Consumer;
/**
* Created by beders on 7/17/15.
*/
public class CommandLine {
Scanner scanner;
PrintStream out;
boolean interactive;
Map<String, Consumer<String>> commands = new HashMap<>();
EventBusBridge bridge;
CommandLine(InputStream is, OutputStream os) {
scanner = new Scanner(is);
out = new PrintStream(os);
interactive = System.console() != null;
on("help", line -> {
out.println("The following commands are available:");
out.println("connect <uri>\t\t Connect to SockJS service at given address");
});
on("connect", line -> {
URI uri = URI.create(line.trim());
bridge = EventBusBridge.connect(uri, eb -> {
out.println("Connected to " + uri);
});
});
on("send", line-> {
String[] args = line.split(" ");
String address = args[0];
String message = args[1];
});
}
private void on(String firstToken, Consumer<String> consumer) {
commands.put(firstToken, consumer);
}
public static void main(String... args) {
new CommandLine(System.in, System.out).go();
}
void go() {
boolean end = false;
if (interactive) {
out.println("Event Bus Command Line. Welcome, user!\nEnter 'help' for usage");
}
do {
try {
if (interactive) out.print("> ");
String cmd = scanner.next();
String rest = scanner.nextLine();
if (cmd.matches("end|quit|exit")) {
end = true;
} else {
commands.getOrDefault(cmd, line -> out.println("Unknown command. Enter 'help' for valid commands")).accept(rest);
}
} catch (Exception e) {
out.println("Oops! " + e.getMessage());
}
} while (!end);
System.exit(0);
}
}