Exemple #1
0
 public ConsoleCommandMethod(object instance, MethodInfo method, ConsoleCommandAttribute attribute)
 {
     Method       = method;
     Instance     = instance;
     Verbs        = attribute.Verbs;
     HelpCategory = attribute.Category;
     HelpMessage  = attribute.Description;
 }
Exemple #2
0
        public void RegisterCommand(object instance, string name = null)
        {
            if (!string.IsNullOrEmpty(name))
            {
                _instances.Add(name.ToLowerInvariant(), instance);
            }

            var methodInfo = _cli.NexusAPI.GetType().GetMethods(BindingFlags.Public | BindingFlags.Instance);

            foreach (var method in methodInfo)
            {
                var attribute = new ConsoleCommandAttribute(method.Name.ToLower(), "NexusAPI", "api command");
                var command   = new ConsoleCommandMethod(instance, method, attribute);
                if (!_verbs.TryGetValue(command.Key, out var commands))
                {
                    _verbs.Add(command.Key, new List <ConsoleCommandMethod>(new[] { command }));
                }
                else
                {
                    commands.Add(command);
                }
            }

            methodInfo = typeof(WalletModule).GetMethods(BindingFlags.Public | BindingFlags.Static);
            foreach (var method in methodInfo)
            {
                foreach (var attribute in method.GetCustomAttributes <ConsoleCommandAttribute>())
                {
                    var command = new ConsoleCommandMethod(instance, method, attribute);
                    if (!_verbs.TryGetValue(command.Key, out var commands))
                    {
                        _verbs.Add(command.Key, new List <ConsoleCommandMethod>(new[] { command }));
                    }
                    else
                    {
                        commands.Add(command);
                    }
                }
            }

            methodInfo = typeof(ScriptModule).GetMethods(BindingFlags.Public | BindingFlags.Static);
            foreach (var method in methodInfo)
            {
                var attribute = new ConsoleCommandAttribute(method.Name.ToLower(), "Script", "Script commands");

                var command = new ConsoleCommandMethod(instance, method, attribute);
                if (!_verbs.TryGetValue(command.Key, out var commands))
                {
                    _verbs.Add(command.Key, new List <ConsoleCommandMethod>(new[] { command }));
                }
                else
                {
                    commands.Add(command);
                }
            }

            methodInfo = typeof(NexusModule).GetMethods(BindingFlags.Public | BindingFlags.Static);
            foreach (var method in methodInfo)
            {
                var attribute = new ConsoleCommandAttribute(method.Name.ToLower(), "Nexus", "Nexus commands");

                var command = new ConsoleCommandMethod(instance, method, attribute);
                if (!_verbs.TryGetValue(command.Key, out var commands))
                {
                    _verbs.Add(command.Key, new List <ConsoleCommandMethod>(new[] { command }));
                }
                else
                {
                    commands.Add(command);
                }
            }

            foreach (var method in instance.GetType().GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic))
            {
                foreach (var attribute in method.GetCustomAttributes <ConsoleCommandAttribute>())
                {
                    // Check handlers

                    if (!method.GetParameters().All(u => u.ParameterType.IsEnum || _handlers.ContainsKey(u.ParameterType)))
                    {
                        throw new ArgumentException("Handler not found for the command: " + method.ToString());
                    }

                    // Add command

                    var command = new ConsoleCommandMethod(instance, method, attribute);

                    if (!_verbs.TryGetValue(command.Key, out var commands))
                    {
                        _verbs.Add(command.Key, new List <ConsoleCommandMethod>(new[] { command }));
                    }
                    else
                    {
                        commands.Add(command);
                    }
                }
            }
        }