public ConsoleCommandMethod(object instance, MethodInfo method, ConsoleCommandAttribute attribute) { Method = method; Instance = instance; Verbs = attribute.Verbs; HelpCategory = attribute.Category; HelpMessage = attribute.Description; }
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); } } } }