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 + ")");
+ }
}
}