예제 #1
0
    public static void RegisterCommandCallback(CommandCallbackDelegate fun)
    {
        _gcHandle = GCHandle.Alloc(fun);

        if (IntPtr.Size == 8)
            RegisterCommandCallback_x64(fun);
        else
            RegisterCommandCallback_x86(fun);
    }
예제 #2
0
        internal Command(CommandBuilder builder, Module module)
        {
            Module = module;

            Description          = builder.Description;
            Remarks              = builder.Remarks;
            Priority             = builder.Priority;
            RunMode              = builder.RunMode ?? module.RunMode;
            IgnoreExtraArguments = builder.IgnoreExtraArguments ?? module.IgnoreExtraArguments;
            Aliases              = builder.Aliases.ToImmutableArray();

            var fullAliases = new List <string>();

            if (Module.FullAliases.Count == 0)
            {
                fullAliases.AddRange(Aliases);
            }

            else if (Aliases.Count == 0)
            {
                fullAliases.AddRange(Module.FullAliases);
            }

            else
            {
                for (var i = 0; i < Module.FullAliases.Count; i++)
                {
                    for (var j = 0; j < Aliases.Count; j++)
                    {
                        fullAliases.Add(string.Concat(Module.FullAliases[i], Service.Separator, Aliases[j]));
                    }
                }
            }
            FullAliases = fullAliases.ToImmutableArray();

            Name = builder.Name ?? (FullAliases.Count > 0 ? FullAliases[0] : null);

            Checks     = builder.Checks.ToImmutableArray();
            Attributes = builder.Attributes.ToImmutableArray();

            var parameters = new List <Parameter>();

            for (var i = 0; i < builder.Parameters.Count; i++)
            {
                parameters.Add(builder.Parameters[i].Build(this));
            }
            Parameters = parameters.ToImmutableArray();

            Callback = builder.Callback;
        }
예제 #3
0
        /// <summary>
        /// 向控制台注册一个控制台命令
        /// </summary>
        /// <param name="commandName">控制台名称</param>
        /// <param name="fun">回调方法</param>
        public static void RegisterConsoleCommand(string commandName, CommandCallbackDelegate fun)
        {
            if (string.IsNullOrEmpty(commandName))
            {
                throw new ArgumentNullException("commandName");
            }

            if (fun == null)
            {
                throw new ArgumentNullException("fun");
            }

            var name = commandName.ToLower();

            if (s_cmdProcList.ContainsKey(name))
            {
                Logs.Warn("控制台命令行已经注册过 {0} 的命令。", commandName);
            }

            s_cmdProcList[name] = fun;
        }
예제 #4
0
        /// <summary>
        /// 向控制台注册一个控制台命令
        /// </summary>
        /// <param name="commandName">控制台名称</param>
        /// <param name="fun">回调方法</param>
        public static void RegisterConsoleCommand(string commandName, CommandCallbackDelegate fun)
        {
            if (string.IsNullOrEmpty(commandName))
                throw new ArgumentNullException("commandName");

            if (fun == null)
                throw new ArgumentNullException("fun");

            var name = commandName.ToLower();
            if (s_cmdProcList.ContainsKey(name))
            {
                Logs.Warn("控制台命令行已经注册过 {0} 的命令。", commandName);
            }

            s_cmdProcList[name] = fun;
        }