consumer) {
+ super.onCall(consumer);
+ eventBus.dispatch(new InterruptEvent(interruptionReason));
+ }
+}
diff --git a/client/src/main/java/envoy/client/data/commands/OnCall.java b/client/src/main/java/envoy/client/data/commands/OnCall.java
new file mode 100644
index 0000000..3dbc18e
--- /dev/null
+++ b/client/src/main/java/envoy/client/data/commands/OnCall.java
@@ -0,0 +1,37 @@
+package envoy.client.data.commands;
+
+import java.util.function.Supplier;
+
+/**
+ * This interface defines an action that should be performed when a system
+ * command gets called.
+ *
+ * Project: envoy-client
+ * File: OnCall.java
+ * Created: 23.07.2020
+ *
+ * @author Leon Hofmeister
+ * @since Envoy Client v0.2-beta
+ */
+public interface OnCall {
+
+ /**
+ * Performs class specific actions when a {@link SystemCommand} has been called.
+ *
+ * The action that should be performed when this {@link SystemCommand} has been
+ * called.
+ *
+ * @since Envoy Client v0.2-beta
+ */
+ void onCall();
+
+ /**
+ * Performs actions that can only be performed by classes that are not
+ * {@link SystemCommand}s when a SystemCommand has been called.
+ *
+ * @param consumer the action to perform when this {@link SystemCommand} has
+ * been called
+ * @since Envoy Client v0.2-beta
+ */
+ void onCall(Supplier consumer);
+}
diff --git a/client/src/main/java/envoy/client/data/commands/SystemCommand.java b/client/src/main/java/envoy/client/data/commands/SystemCommand.java
index 9a3eecd..f0b6a29 100644
--- a/client/src/main/java/envoy/client/data/commands/SystemCommand.java
+++ b/client/src/main/java/envoy/client/data/commands/SystemCommand.java
@@ -1,6 +1,7 @@
package envoy.client.data.commands;
import java.util.function.Function;
+import java.util.function.Supplier;
/**
* This class is the base class of all {@code SystemCommands} and contains an
@@ -20,7 +21,7 @@ import java.util.function.Function;
* @author Leon Hofmeister
* @since Envoy Client v0.2-beta
*/
-public final class SystemCommand {
+public class SystemCommand implements OnCall {
/**
* This variable stores the amount of arguments that need to be parsed for the
@@ -39,8 +40,10 @@ public final class SystemCommand {
protected final String description;
+ protected int relevance = 0;
+
/**
- * Constructs a new {@code NoArgSystemCommand} that takes no arguments.
+ * Constructs a new {@code SystemCommand}.
*
* @param action the action that should be performed
* @param numberOfArguments the amount of arguments that need to be parsed for
@@ -72,4 +75,25 @@ public final class SystemCommand {
* @since Envoy Client v0.2-beta
*/
public String getDescription() { return description; }
+
+ /**
+ * @return the relevance
+ * @since Envoy Client v0.2-beta
+ */
+ public int getRelevance() { return relevance; }
+
+ /**
+ * @param relevance the relevance to set
+ * @since Envoy Client v0.2-beta
+ */
+ public void setRelevance(int relevance) { this.relevance = relevance; }
+
+ @Override
+ public void onCall() { relevance++; }
+
+ @Override
+ public void onCall(Supplier consumer) {
+ onCall();
+ consumer.get();
+ }
}
diff --git a/client/src/main/java/envoy/client/data/commands/SystemCommandsMap.java b/client/src/main/java/envoy/client/data/commands/SystemCommandsMap.java
index 2eb45f2..a9c6c84 100644
--- a/client/src/main/java/envoy/client/data/commands/SystemCommandsMap.java
+++ b/client/src/main/java/envoy/client/data/commands/SystemCommandsMap.java
@@ -265,6 +265,7 @@ public class SystemCommandsMap {
try {
systemCommand.getAction().apply(arguments);
commandExecuted = true;
+ systemCommand.onCall();
} catch (final Exception e) {
logger.log(Level.WARNING, "The system command " + getCommand(input) + " threw an exception: ", e);
}
diff --git a/client/src/main/java/envoy/client/event/InterruptEvent.java b/client/src/main/java/envoy/client/event/InterruptEvent.java
new file mode 100644
index 0000000..7676267
--- /dev/null
+++ b/client/src/main/java/envoy/client/event/InterruptEvent.java
@@ -0,0 +1,28 @@
+package envoy.client.event;
+
+import envoy.event.Event;
+
+/**
+ * This event serves the purpose of interrupting something so that it will not
+ * be finished.
+ *
+ * Project: envoy-client
+ * File: InterruptEvent.java
+ * Created: 23.07.2020
+ *
+ * @author Leon Hofmeister
+ * @since Envoy Client v0.2-beta
+ */
+public class InterruptEvent extends Event {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Creates a new {@link InterruptEvent}.
+ *
+ * @param reason the reason why this event exists -> allows finer sieving
+ * @since Envoy Client v0.2-beta
+ */
+ public InterruptEvent(String reason) { super(reason); }
+
+}