Пример #1
0
    void InitJsEnv()
    {
        //调试端口:8080
        jsEnv = new JsEnv(new JsLoader(), 8080);
        if (jsEnv == null)
        {
            Logger.LogError("InitJsEnv null!!!");
        }

        //声明Action
        jsEnv.UsingAction <float>();
        jsEnv.UsingAction <float, float>();
        jsEnv.UsingAction <string, byte[]>();
        jsEnv.UsingAction <Scene, LoadSceneMode>();
    }
Пример #2
0
        private void Run <Arg0Type, Arg1Type, Arg2Type>(Arg0Type arg0, Arg1Type arg1, Arg2Type arg2)
        {
            JsEnv jsEnv = new JsEnv();

            jsEnv.UsingAction <Arg0Type, Arg1Type, Arg2Type>();
            jsEnv.Eval("global.CS = require('csharp'); global.PUERTS = require('puerts');");

            Action <Arg0Type, Arg1Type, Arg2Type> func = jsEnv.Eval <Action <Arg0Type, Arg1Type, Arg2Type> >("global.func = function (value) {  }; global.func");

            for (var i = 0; i < PuertsPerformanceUtil.warmUpRepeatCount; i++)
            {
                func.Invoke(arg0, arg1, arg2);
            }

            Measure
            .Method(() =>
            {
                for (var i = 0; i < PuertsPerformanceUtil.repeatCount; i++)
                {
                    func.Invoke(arg0, arg1, arg2);
                }
            })
            .WarmupCount(PuertsPerformanceUtil.warmUpCount)
            .MeasurementCount(PuertsPerformanceUtil.SampleCount)
            .Run();
        }
Пример #3
0
        private void RunAndValidate <Arg0Type>(string validator, Arg0Type arg)
        {
            JsEnv jsEnv = new JsEnv();

            jsEnv.UsingAction <Arg0Type>();
            jsEnv.Eval("global.CS = require('csharp'); global.PUERTS = require('puerts');");

            Action <Arg0Type> func = jsEnv.Eval <Action <Arg0Type> >("global.func = function (value) {  }; global.func");

            for (var i = 0; i < PuertsPerformanceUtil.warmUpRepeatCount; i++)
            {
                func.Invoke(arg);
            }

            Measure
            .Method(() =>
            {
                for (var i = 0; i < PuertsPerformanceUtil.repeatCount; i++)
                {
                    func.Invoke(arg);
                }
            })
            .WarmupCount(PuertsPerformanceUtil.warmUpCount)
            .MeasurementCount(PuertsPerformanceUtil.SampleCount)
            .Run();

            jsEnv.Eval(string.Format("global.func = function (value) {{ if (!({0})) throw new Error('validate failed'); }}", validator));
        }
Пример #4
0
    static void Watch()
    {
        env = new JsEnv();
        env.UsingAction <int>();
        bool result = env.Eval <bool>(@"
            global.CS = require('csharp');
            process.on('uncaughtException', function(e) { console.error('uncaughtException', e) });
            try {
                const moduleRequire = require('module').createRequire('" + Application.dataPath + @"/Examples/Editor/03_NodeTSCAndHotReload/js~/')
                moduleRequire('ts-node').register({
                    compilerOptions: {
                        'strict': false,
                        'strictNullChecks': false,
                        'strictPropertyInitialization': false,
                        'target': 'ES6',
                        'module': 'commonjs',
                        'sourceMap': true,
                        'moduleResolution': 'node',
                        'typeRoots': [
                            './node_modules/@types'
                        ]
                    }
                })
                global.HotReloadWatcher = moduleRequire('./src/watch.ts').default

                const jsEnvs = CS.Puerts.JsEnv.jsEnvs
                console.log('jsEnvs.Count:' + jsEnvs.Count);
                for (let i = 0; i < jsEnvs.Count; i++)
                {
                    const item = jsEnvs.get_Item(i);
                    if (item && item.debugPort != -1) {
                        HotReloadWatcher.addDebugger(item.debugPort)
                    }
                }

                CS.NodeTSCAndHotReload.addDebugger = HotReloadWatcher.addDebugger.bind(HotReloadWatcher);
                CS.NodeTSCAndHotReload.removeDebugger = HotReloadWatcher.removeDebugger.bind(HotReloadWatcher);
                
                true;
            } catch(e) {
                console.error(e.stack);
                console.error('Some error triggered. Maybe you should run `npm i` in `js~` directory');
                false;
            }
        ");

        if (!result)
        {
            UnWatch();
        }
        else
        {
            UnityEngine.Debug.Log("watching tsproj");
        }
    }
Пример #5
0
    void Start()
    {
        if (jsEnv == null)
        {
            jsEnv = new JsEnv();
            jsEnv.UsingAction <bool>();//toggle.onValueChanged用到
        }

        var init = jsEnv.Eval <Action <MonoBehaviour> >("const m = require('UIEvent'); m.init;");

        if (init != null)
        {
            init(this);
        }
    }
Пример #6
0
        // Use this for initialization
        void Start()
        {
            jsEnv = new JsEnv();

            //要使用值类型参数或者返回值的委托要声明,而Callback1因为是引用类型所以不用。
            jsEnv.UsingAction <int>();

            jsEnv.Eval(@"
                const CS = require('csharp');
                let obj = new CS.PuertsTest.TestClass();
                //如果你后续要remove,需要这样构建一个Delegate,后续可以用该Delegate引用去remove
                let delegate = new CS.PuertsTest.Callback1(o => o.Foo()); 
                obj.AddEventCallback1(delegate);
                obj.AddEventCallback2(i => console.log(i)); //如果不需要remove,直接传函数即可
                obj.Trigger();
                obj.RemoveEventCallback1(delegate);
                obj.Trigger();
            ");
        }
Пример #7
0
    async Task InitJsEnv()
    {
        //预加载JS ,在JSEnv初始化前调用
        await ResourceManager.PreloadJS(AddressableConfig.JSLable);

        //调试端口:8080
        jsEnv = new JsEnv(new JsLoader(), 8080);
        jsEnv.ExecuteFile("puerts/flatbuffers.js");
        if (jsEnv == null)
        {
            Logger.LogError("InitJsEnv null!!!");
        }

        //声明Action: 值类型才需要这样添加
        jsEnv.UsingAction <float>();
        jsEnv.UsingAction <float, float>();
        jsEnv.UsingAction <string, byte[]>();
        jsEnv.UsingAction <Scene, LoadSceneMode>();
        jsEnv.UsingAction <TChannel, int>();
        jsEnv.UsingAction <int, GObject>();
    }