Пример #1
0
        private void OnInit()
        {
            if (_runMode == RunMode.Playing)
            {
                return;
            }

            if (_runtime == null)
            {
                var logger       = new DefaultScriptLogger();
                var pathResolver = new PathResolver();
                var fileSystem   = new DefaultFileSystem(logger);
                var asyncManager = new DefaultAsyncManager();

                _tick    = Environment.TickCount;
                _runtime = ScriptEngine.CreateRuntime(true);
                _runtime.AddModuleResolvers();
                _runtime.extraBinding = (runtime, register) =>
                {
                    FSWatcher.Bind(register);
                };
                _runtime.Initialize(new ScriptRuntimeArgs
                {
                    fileSystem          = fileSystem,
                    pathResolver        = pathResolver,
                    asyncManager        = asyncManager,
                    logger              = logger,
                    byteBufferAllocator = new ByteBufferPooledAllocator(),
                    binder              = DefaultBinder.GetBinder(_prefs.reflectBinding),
                });
                _ready = true;
            }
        }
Пример #2
0
        void Awake()
        {
            IFileSystem fileSystem;

            _mConsole = new MiniConsole(scrollRect, text, 100);
            _rt       = ScriptEngine.CreateRuntime();
            var asyncManager = new DefaultAsyncManager();
            var pathResolver = new PathResolver();

            pathResolver.AddSearchPath("node_modules");

            if (fileLoader == FileLoader.Resources)
            {
                fileSystem = new ResourcesFileSystem(_mConsole);
                pathResolver.AddSearchPath("dist"); // 这里的路径相对于 Unity Resources 空间
            }
            else if (fileLoader == FileLoader.HMR)
            {
                Debug.LogWarningFormat("功能未完成");
                fileSystem = new HttpFileSystem(_mConsole, baseUrl);
            }
            else
            {
                // 演示了一般文件系统的访问, 实际项目中典型的情况需要自行实现基于 AssetBundle(或 7z/zip) 的文件访问层
                fileSystem = new DefaultFileSystem(_mConsole);
                pathResolver.AddSearchPath("Scripts/out");
                // pathResolver.AddSearchPath("../Scripts/out");
                // _rt.AddSearchPath("Assets/Examples/Scripts/dist");
            }

            _rt.withStacktrace = stacktrace;
            if (sourceMap)
            {
                _rt.EnableSourceMap();
            }
            _rt.AddModuleResolvers();
            _rt.extraBinding = (runtime, register) =>
            {
                FSWatcher.Bind(register);
                QuickJS.Extra.WebSocket.Bind(register);
                QuickJS.Extra.XMLHttpRequest.Bind(register);
                if (!runtime.isWorker)
                {
                    var uri = new Uri(baseUrl);
                    QuickJS.Extra.DOMCompatibleLayer.Bind(register, uri);
                    QuickJS.Extra.NodeCompatibleLayer.Bind(register);
                }
            };
            _rt.Initialize(new ScriptRuntimeArgs
            {
                fileSystem          = fileSystem,
                pathResolver        = pathResolver,
                asyncManager        = asyncManager,
                logger              = _mConsole,
                byteBufferAllocator = new ByteBufferPooledAllocator(),
                binder              = DefaultBinder.GetBinder(useReflectBind),
            });
            _rt.EvalMain(entryFileName);
        }
Пример #3
0
 public void OnBind(ScriptRuntime runtime, TypeRegister register)
 {
     FSWatcher.Bind(register);
     // QuickJS.Extra.WebSocket.Bind(register);
     // QuickJS.Extra.XMLHttpRequest.Bind(register);
     // if (!runtime.isWorker)
     // {
     //     QuickJS.Extra.DOMCompatibleLayer.Bind(register);
     //     QuickJS.Extra.NodeCompatibleLayer.Bind(register);
     // }
 }
Пример #4
0
        public void OnBind(ScriptRuntime runtime, TypeRegister register)
        {
            runtime.AddStaticModule("static_test1", context => QuickJS.Native.JSApi.JS_NewInt32(context, 123));
            runtime.AddStaticModule("static_test2", context => QuickJS.Native.JSApi.JS_NewInt32(context, 456));

            FSWatcher.Bind(register);
            QuickJS.Extra.WebSocket.Bind(register);
            QuickJS.Extra.XMLHttpRequest.Bind(register);
            if (!runtime.isWorker)
            {
                var uri = new Uri(baseUrl);
                QuickJS.Extra.DOMCompatibleLayer.Bind(register, uri);
                QuickJS.Extra.NodeCompatibleLayer.Bind(register);
            }
        }