Example #1
0
        private static void AppendCommandInfo(StringBuilder sb, BaseConsoleCommand consoleCommand, string prefix)
        {
            if (consoleCommand.Alias != null)
            {
                sb.Append(prefix)
                .Append(consoleCommand.Alias)
                .AppendLine();
            }

            sb.Append(prefix)
            .Append(consoleCommand.Name);

            sb.AppendLine();

            sb.Append("* Description: ")
            .AppendLine(consoleCommand.Description);

            sb.Append("* Type: ")
            .Append(GetTypeString(consoleCommand.Kind))
            .AppendLine()
            .AppendLine("* Usage: ");

            var isServer = IsServer;

            if (consoleCommand.Alias != null)
            {
                PrintUsageExample(consoleCommand.Alias);
            }

            PrintUsageExample(consoleCommand.Name);
            sb.AppendLine();

            void PrintUsageExample(string title)
            {
                foreach (var variant in consoleCommand.Variants)
                {
                    sb.Append("  ");

                    if (isServer ||
                        (consoleCommand.Kind & ConsoleCommandKinds.ServerEveryone) != 0 ||
                        (consoleCommand.Kind & ConsoleCommandKinds.ServerOperator) != 0)
                    {
                        sb.Append(ConsoleCommandsSystem.ServerConsoleCommandPrefixOnClient);
                    }

                    sb.Append(title);

                    var parameters = variant.Parameters;
                    foreach (var commandParameter in parameters)
                    {
                        sb.Append(' ')
                        .Append(commandParameter.Name);
                    }

                    sb.AppendLine();
                }
            }
        }
Example #2
0
        static IEnumerable <string> Execute(BaseConsoleCommand command)
        {
            if (!commandLibraries.ContainsKey(command.LibraryClassName) || !commandLibraries[command.LibraryClassName].ContainsKey(command.Name))
            {
                throw new Exception(Constants.LibraryClassDoesntExistMessage);
            }

            var parameterInfo = commandLibraries[command.LibraryClassName][command.Name];

            if (parameterInfo.Where(_ => _.IsOptional == false).Count() > command.Arguments.Count())
            {
                throw new Exception(Constants.InvalidArgumentCountMessage);
            }

            object result;

            try
            {
                result = Assembly.GetExecutingAssembly()
                         .GetType($"{Constants.CommandNamespace}.{command.LibraryClassName}")
                         .InvokeMember(
                    command.Name,
                    BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.Public,
                    null,
                    null,
                    command.Arguments
                    .Take(parameterInfo.Count())
                    .ZipAll(parameterInfo, (a, b) => Convert.ChangeType(a == default(string) ? b.DefaultValue : a, b.ParameterType)).ToArray());
            }
            catch (TargetInvocationException ex)
            {
                throw ex.InnerException;
            }

            if (result == null)
            {
                yield return(null);
            }
            else
            if (result is IEnumerable <string> )
            {
                foreach (var str in result.As <IEnumerable <string> >())
                {
                    yield return(str);
                }
            }
            else
            {
                yield return(result.ToString());
            }
        }