예제 #1
0
        private readonly ScriptInstruction[] m_scriptInstructions; //指令集

        public ScriptContext(Script script, string breviary, ScriptFunctionData functionData, double[] constDouble, long[] constLong, string[] constString, ScriptContext[] constContexts, ScriptClassData[] constClasses)
        {
            m_script           = script;
            m_global           = script.Global;
            this.constDouble   = constDouble;
            this.constLong     = constLong;
            this.constString   = constString;
            this.constContexts = constContexts;
            this.constClasses  = constClasses;
            this.internalCount = functionData.internalCount;

            m_Breviary           = breviary;
            m_FunctionData       = functionData;
            m_scriptInstructions = functionData.scriptInstructions;
        }
예제 #2
0
        private void LoadScriptModule(Type moduleType)
        {
            try
            {
                var moduleObj = _neonManager.Resolve(moduleType);

                foreach (var methodInfo in moduleType.GetMethods(BindingFlags.Public | BindingFlags.Instance))
                {
                    var scriptFunctionAttribute = methodInfo.GetCustomAttribute <ScriptFunctionAttribute>();

                    if (scriptFunctionAttribute != null)
                    {
                        _logger.LogInformation($"Module: {moduleType.Name} - {scriptFunctionAttribute.FunctionName} - {scriptFunctionAttribute.HelpText}");

                        var functionData = new ScriptFunctionData()
                        {
                            FunctionName     = scriptFunctionAttribute.FunctionName,
                            OutputType       = methodInfo.ReturnType.Name,
                            ScriptModuleName = moduleType.Name,
                            HelpText         = scriptFunctionAttribute.HelpText
                        };

                        foreach (var parameter in methodInfo.GetParameters())
                        {
                            functionData.Parameters.Add(new ScriptFunctionParamData()
                            {
                                ParamOrder = parameter.Position,
                                ParamName  = parameter.Name,
                                ParamType  = parameter.ParameterType.Name
                            });
                        }

                        RegisterFunction(scriptFunctionAttribute.FunctionName, moduleObj, methodInfo);

                        Functions.Add(functionData);
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.LogError($"Error during load script module: {moduleType.Name} - {ex}");
            }
        }