mirror of
https://github.com/Stone-Red-Code/RemSox.git
synced 2026-09-04 00:56:19 +02:00
70 lines
1.7 KiB
C#
70 lines
1.7 KiB
C#
using RemSox.Processing;
|
|
using RemSox.UI.CLI;
|
|
|
|
namespace RemSox.Processes;
|
|
|
|
internal class CliProcess() : Process("Cli")
|
|
{
|
|
private string currentInput = string.Empty;
|
|
|
|
internal override void Start(string[] args)
|
|
{
|
|
Console.Clear();
|
|
Console.WriteLine("Welcome RemSox!");
|
|
Console.WriteLine("Type 'help' to see available commands.");
|
|
Console.Write("> ");
|
|
}
|
|
|
|
internal override void Tick()
|
|
{
|
|
while (Console.KeyAvailable)
|
|
{
|
|
ConsoleKeyInfo key = Console.ReadKey(intercept: true);
|
|
|
|
switch (key.Key)
|
|
{
|
|
case ConsoleKey.Enter:
|
|
Console.WriteLine();
|
|
|
|
HandleCommand(currentInput);
|
|
|
|
currentInput = string.Empty;
|
|
Console.Write("> ");
|
|
break;
|
|
|
|
case ConsoleKey.Backspace:
|
|
if (currentInput.Length > 0)
|
|
{
|
|
currentInput = currentInput[..^1];
|
|
Console.Write("\b \b");
|
|
}
|
|
break;
|
|
|
|
default:
|
|
if (!char.IsControl(key.KeyChar))
|
|
{
|
|
currentInput += key.KeyChar;
|
|
Console.Write(key.KeyChar);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void HandleCommand(string input)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(input))
|
|
{
|
|
return;
|
|
}
|
|
|
|
bool handled = CommandManager.TryExecute(
|
|
input,
|
|
line => Console.WriteLine(line));
|
|
|
|
if (!handled)
|
|
{
|
|
Console.WriteLine($"\"{input}\" is not a command");
|
|
}
|
|
}
|
|
} |