From 35990bbd6f1aacd5445aa2cb7dfd079d84b6c901 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tomas=20Wenstr=C3=B6m?= Date: Mon, 25 Nov 2019 22:56:12 +0100 Subject: [PATCH] Register and use commands --- src/kaka/cakelight/Console.java | 30 ++++++++++++++++++++++++++ src/kaka/cakelight/mode/TwoColorNoiseMode.java | 9 +++++--- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/src/kaka/cakelight/Console.java b/src/kaka/cakelight/Console.java index 0b956ae..120d0f4 100644 --- a/src/kaka/cakelight/Console.java +++ b/src/kaka/cakelight/Console.java @@ -8,11 +8,14 @@ import kaka.cakelight.mode.VideoMode; 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 commands = new HashMap<>(); + private List commandList = new ArrayList<>(); public static void start(CakeLight cakelight, Configuration config) { new Console(cakelight, config).start(); @@ -22,6 +25,7 @@ public class Console extends Thread { this.cakelight = cakelight; this.config = config; reader = new BufferedReader(new InputStreamReader(System.in)); + register(TwoColorNoiseMode.getCommand()); public CakeLight getCakelight() { return cakelight; @@ -30,6 +34,16 @@ public class Console extends Thread { 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 @@ -38,6 +52,18 @@ public class Console extends Thread { 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); @@ -110,5 +136,9 @@ public class Console extends Thread { System.out.println("Failed to parse color '" + s + "'. Using black instead."); return Color.BLACK; } + + default void output(String text) { + System.out.println("(" + text + ")"); + } } } diff --git a/src/kaka/cakelight/mode/TwoColorNoiseMode.java b/src/kaka/cakelight/mode/TwoColorNoiseMode.java index 1ebb930..4046cbd 100644 --- a/src/kaka/cakelight/mode/TwoColorNoiseMode.java +++ b/src/kaka/cakelight/mode/TwoColorNoiseMode.java @@ -11,16 +11,19 @@ public class TwoColorNoiseMode extends AmbientMode { 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"); } } }; -- 2.11.0