import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
+import java.util.*;
public class Console extends Thread {
private CakeLight cakelight;
private Configuration config;
private BufferedReader reader;
+ private Map<String, Command> commands = new HashMap<>();
+ private List<Command> commandList = new ArrayList<>();
public static void start(CakeLight cakelight, Configuration config) {
new Console(cakelight, config).start();
this.cakelight = cakelight;
this.config = config;
reader = new BufferedReader(new InputStreamReader(System.in));
+ register(TwoColorNoiseMode.getCommand());
public CakeLight getCakelight() {
return cakelight;
public Configuration getConfig() {
return config;
}
+
+ private void register(Command cmd) {
+ for (String name : cmd.getNames()){
+ if (commands.containsKey(name)) {
+ System.out.println("Command name '" + name + "' is already registered by '" + commands.get(name).getClass() + "'!");
+ System.exit(1);
+ }
+ commands.put(name, cmd);
+ }
+ commandList.add(cmd);
}
@Override
System.out.print("> ");
try {
String input = reader.readLine();
+ String[] splitInput = input.split("\\s+", 2);
+ String name = splitInput[0];
+ String[] args = splitInput.length == 2
+ ? splitInput[1].split("\\s+")
+ : new String[]{};
+
+ Command cmd = commands.get(name);
+ if (cmd != null) {
+ cmd.activate(this, args);
+ continue;
+ }
+
if (input.matches("[0-5]")) {
cakelight.setMode(new AmbientMode(new String[] {input}));
System.out.println("setting ambient mode to " + input);
System.out.println("Failed to parse color '" + s + "'. Using black instead.");
return Color.BLACK;
}
+
+ default void output(String text) {
+ System.out.println("(" + text + ")");
+ }
}
}
public static Console.Command getCommand() {
return new Console.Command() {
+ @Override
public String[] getNames() {
return new String[] {"n", "noise"};
}
+ @Override
public void activate(Console console, String[] args) {
- if (args.length == 3) { // cmd + col1 + col2
+ if (args.length == 2) { // col1 + col2
console.getCakelight().setMode(new TwoColorNoiseMode(
- parseColor(args[1]),
- parseColor(args[2])
+ parseColor(args[0]),
+ parseColor(args[1])
));
+ output("setting two-color noise mode");
}
}
};