コード例 #1
0
        public async void Testtabris1()
        {
            RequireManager requireManager = new RequireManager();

            ManagerPool.InitializeCurrentPool(new ManagerSettings());
            JavaScript.Manager.Tabris.Tabris.Register(requireManager, new JavaScript.Manager.Tabris.TabrisOptions
            {
            });
            using (var scope = new ManagerScope(requireManager))
            {
                var code = @"var tabris;
(function (){
  tabris = tabris || require('javascript_tabris'); 
try{
var lib = require('../TestDll.dll');
var myClrObject = new lib.TestDll.MyClass('tttt');
myClrObject.SayHello(); 
}catch(err){
host.err=err.message;
host.ex=err;
}
})();";
                await scope.RuntimeManager.ExecuteAsync("btnExcutor_Click", code);
            }


            //RequireManager.ClearPackages();
        }
        public async void Script_With_Multiple_Requires_Is_Used()
        {
            var subject = new TestObject();
            var manager = new RuntimeManager(new ManualManagerSettings {
                ScriptTimeoutMilliSeconds = 0
            });

            RequireManager.RegisterPackage(new RequiredPackage {
                PackageId = "testRequire", ScriptUri = ".\\TestRequire.js"
            });
            RequireManager.RegisterPackage(new RequiredPackage {
                PackageId = "testRequire2", ScriptUri = ".\\TestRequire2.js"
            });

            await
            manager.ExecuteAsync("testscript",
                                 "var testObject = require('testRequire'); var testObject2 = require('testRequire2');subject.Count = testObject2.getNumber(); subject.TestString = testObject.getText();",
                                 new ExecutionOptions
            {
                HostObjects = new List <HostObject> {
                    new HostObject {
                        Name = "subject", Target = subject
                    }
                },
            });

            subject.Name.ShouldEqual("Name");
            subject.Count.ShouldEqual(300);
            subject.TestString.ShouldEqual("testText");
        }
コード例 #3
0
        public async void Script_With_Require_Is_Used()
        {
            var subject = new TestObject();
            var manager = new RuntimeManager(new ManualManagerSettings {
                ScriptTimeoutMilliSeconds = 0
            });

            RequireManager.RegisterPackage(new RequiredPackage {
                PackageId = "testRequire", ScriptUri = "https://gist.githubusercontent.com/eswann/76ecaba02dee33cf26b4/raw/bcafe0a389c84ba44d6ee1661e66b2213aa2ffa0/testRequire"
            });

            await
            manager.ExecuteAsync("testscript",
                                 "var testObject = require('testRequire'); subject.Count = 10; subject.TestString = testObject.getText();",
                                 new ExecutionOptions
            {
                HostObjects = new List <HostObject> {
                    new HostObject {
                        Name = "subject", Target = subject
                    }
                },
            });

            subject.Name.ShouldEqual("Name");
            subject.Count.ShouldEqual(10);
            subject.TestString.ShouldEqual("testText");
        }
コード例 #4
0
    private void Awake()
    {
        if (!Instance)
        {
            Instance = this;
        }

        LoadJSON();
    }
コード例 #5
0
        /// <summary>
        /// 注册所有需要使用的包
        /// </summary>
        /// <param name="RequireManager"></param>
        /// <param name="options"></param>
        public static void Register(RequireManager RequireManager, TabrisOptions options = null)
        {
            //tabris
            RequireManager.RegisterPackage(new TabrisPackage());

            //sql
            SqlPackageHelpers.RegisterPackage(RequireManager, options?.DbExecutor ?? new AntOrmDbExecutor());

            //http
            HttpPackageHelpers.RegisterPackage(RequireManager);

            //log
            LogPackageHelpers.RegisterPackage(RequireManager, options?.LogExecutor);
        }
コード例 #6
0
        /// <summary>
        /// Creates a new Runtime Manager.
        /// </summary>
        /// <param name="settings">Settings to apply to the Runtime Manager and the scripts it runs.</param>
        public RuntimeManager(IManagerSettings settings)
        {
            _settings = settings;

            _v8Runtime = new V8Runtime(new V8RuntimeConstraints
            {
                MaxExecutableSize = settings.MaxExecutableBytes,
                MaxOldSpaceSize   = settings.MaxOldSpaceBytes,
                MaxNewSpaceSize   = settings.MaxNewSpaceBytes
            });

            _scriptCompiler = new ScriptCompiler(_v8Runtime, settings);

            RequireManager = new RequireManager();
        }
コード例 #7
0
        public async void Testtabris()
        {
            RequireManager requireManager = new RequireManager();

            Tabris.Register(requireManager);
            ManagerPool.InitializeCurrentPool(new ManagerSettings());
            using (var scope = new ManagerScope(requireManager))
            {
                var code = "var log = this.tabris.create('LOG');" +
                           "try{ aa.ttt =1}catch(err){log.info(err)}";
                code = "var tabris;" + "(function (){\n  tabris = tabris || require('javascript_tabris'); \n" + code + "\n})();";
                await scope.RuntimeManager.ExecuteAsync("btnExcutor_Click", code);

                code = "var log = this.tabris.create('LOG');" +
                       "try{ aa.ttt =1}catch(err){log.info(err)}";
                code = "var tabris;" + "(function (){\n  tabris = tabris || require('javascript_tabris'); \n" + code + "\n})();";
                await scope.RuntimeManager.ExecuteAsync("btnExcutor_Click", code);
            }


            //RequireManager.ClearPackages();
        }
 public void Setup()
 {
     RequireManager.ClearPackages();
 }
コード例 #9
0
        public async Task <V8ScriptEngine> ExecuteAsync(IEnumerable <IncludeScript> scripts, Action <V8ScriptEngine> configAction, ExecutionOptions options = null)
        {
            var scriptList = PrecheckScripts(scripts);

            if (scriptList == null)
            {
                return(null);
            }

            if (options == null)
            {
                options = new ExecutionOptions();
            }

            IEnumerable <V8Script> compiledScripts = scriptList.Select(x => _scriptCompiler.Compile(x, options.AddToCache, options.CacheExpirationSeconds));

            GetEngine();

            if (AddConsoleReference)
            {
                _scriptEngine.AddHostType("Console", typeof(Console));
            }

            RequireManager.BuildRequirer(_scriptCompiler, _scriptEngine);

            if (configAction != null)
            {
                configAction(_scriptEngine);
            }

            if (options.Scripts != null)
            {
                foreach (var script in options.Scripts)
                {
                    var compiledInclude = _scriptCompiler.Compile(script, options.AddToCache);
                    if (compiledInclude != null)
                    {
                        _scriptEngine.Execute(compiledInclude);
                    }
                }
            }

            foreach (var compiledScript in compiledScripts)
            {
                //Only create a wrapping task if the script has a timeout.
                CancellationToken cancellationToken;
                if (TryCreateCancellationToken(out cancellationToken))
                {
                    using (cancellationToken.Register(_scriptEngine.Interrupt))
                    {
                        try
                        {
                            V8Script script = compiledScript;
                            await Task.Run(() => _scriptEngine.Execute(script), cancellationToken).ConfigureAwait(false);
                        }
                        catch (ScriptInterruptedException ex)
                        {
                            var newEx = new ScriptInterruptedException(
                                "Script interruption occurred, this often indicates a script timeout.  Examine the data and inner exception for more information.", ex);
                            newEx.Data.Add("Timeout", _settings.ScriptTimeoutMilliSeconds);
                            newEx.Data.Add("ScriptId", compiledScript.Name);

                            throw newEx;
                        }
                    }
                }
                else
                {
                    _scriptEngine.Execute(compiledScript);
                }
            }

            return(_scriptEngine);
        }
コード例 #10
0
 /// <summary>
 /// Registers packages needed for using the request include.
 /// </summary>
 public static void RegisterPackage(RequireManager RequireManager)
 {
     RequireManager.RegisterPackage(new HttpPackage());
     RequireManager.RegisterPackage(new RequestPackage());
 }
コード例 #11
0
 public ManagerScope(RequireManager requireManager)
 {
     RuntimeManager = ManagerPool.CurrentPool.GetRuntime();
     RuntimeManager.RequireManager = requireManager;
 }
コード例 #12
0
 /// <summary>
 /// Registers packages needed for using the request include.
 /// </summary>
 public static void RegisterPackage(RequireManager RequireManager, object sqlExcutor)
 {
     RequireManager.RegisterPackage(new SqlExecutor(sqlExcutor));
     RequireManager.RegisterPackage(new SqlPackage());
 }
コード例 #13
0
 /// <summary>
 /// Registers packages needed for using the request include.
 /// </summary>
 public static void RegisterPackage(RequireManager RequireManager, object webViewExecutor)
 {
     RequireManager.RegisterPackage(new WebViewExcutorPackage(webViewExecutor));
     RequireManager.RegisterPackage(new WebViewPackage());
 }
コード例 #14
0
 /// <summary>
 /// Registers packages needed for using the request include.
 /// </summary>
 public static void RegisterPackage(RequireManager RequireManager, object logExcutor = null)
 {
     RequireManager.RegisterPackage(new LogExcutorPackage(logExcutor));
     RequireManager.RegisterPackage(new LogPackage());
 }
コード例 #15
0
 /// <summary>
 /// Registers packages needed for using the request include.
 /// </summary>
 public static void RegisterPackage(RequireManager RequireManager)
 {
     RequireManager.RegisterPackage(new TimerPackageExecutor());
     RequireManager.RegisterPackage(new TimerPackage());
 }