| package li.cil.oc.api.machine; |
| |
| /** |
| * Used by the Machine to determine the result of a call to |
| * {@link Architecture#runThreaded(boolean)}. |
| * <p/> |
| * Do not implement this interface, only use the predefined internal classes. |
| */ |
| public abstract class ExecutionResult { |
| /** |
| * Indicates the machine may sleep for the specified number of ticks. This |
| * is merely considered a suggestion. If signals are in the queue or are |
| * pushed to the queue while sleeping, the sleep will be interrupted and |
| * {@link Architecture#runThreaded(boolean)} will be called so that the next |
| * signal is pushed. |
| */ |
| public static final class Sleep extends ExecutionResult { |
| /** |
| * The number of ticks to sleep. |
| */ |
| public final int ticks; |
| |
| public Sleep(int ticks) { |
| this.ticks = ticks; |
| } |
| } |
| |
| /** |
| * Indicates tha the computer should shutdown or reboot. |
| */ |
| public static final class Shutdown extends ExecutionResult { |
| /** |
| * Whether to reboot. If false the computer will stop. |
| */ |
| public final boolean reboot; |
| |
| public Shutdown(boolean reboot) { |
| this.reboot = reboot; |
| } |
| } |
| |
| /** |
| * Indicates that a synchronized call should be performed. The architecture |
| * is expected to be in a state that allows the next call to be to |
| * {@link Architecture#runSynchronized()} instead of |
| * {@link Architecture#runThreaded(boolean)}. This is used to perform calls |
| * from the server's main thread, to avoid threading issues when interacting |
| * with other objects in the world. |
| */ |
| public static final class SynchronizedCall extends ExecutionResult { |
| } |
| |
| /** |
| * Indicates that an error occurred and the computer should crash. |
| */ |
| public static final class Error extends ExecutionResult { |
| /** |
| * The error message. |
| */ |
| public final String message; |
| |
| public Error(String message) { |
| this.message = message; |
| } |
| } |
| } |