using System; using NitroxModel.DataStructures.Util; namespace NitroxServer.ConsoleCommands.Abstract { public abstract partial class Command { public ref struct CallArgs { public Command Command { get; } public Optional Sender { get; } public Span Args { get; } public bool IsConsole => !Sender.HasValue; public string SenderName => Sender.HasValue ? Sender.Value.Name : "SERVER"; public CallArgs(Command command, Optional sender, Span args) { Command = command; Sender = sender; Args = args; } public bool IsValid(int index) { return index < Args.Length && index >= 0 && Args.Length != 0; } public string GetTillEnd(int startIndex = 0) { // TODO: Proper argument capture/parse instead of this argument join hack if (Args.Length > 0) { return string.Join(" ", Args.Slice(startIndex).ToArray()); } return string.Empty; } public string Get(int index) { return Get(index); } public T Get(int index) { IParameter param = Command.Parameters[index]; string arg = IsValid(index) ? Args[index] : null; if (arg == null) { return default(T); } if (typeof(T) == typeof(string)) { return (T)(object)arg; } return (T)param.Read(arg); } } } }