Ejemplo n.º 1
0
        internal void Init(bool enableDebug)
        {
            isDebug       = enableDebug;
            contextSwitch = new ContextSwitchService(jsContext, syncHandle);
            ServiceNode.PushService <IContextSwitchService>(contextSwitch);
            ServiceNode.PushService <IGCSyncService>(new GCSyncService());
            Enter();
            promiseContinuationCallback = delegate(JavaScriptValue task, IntPtr callbackState)
            {
                promiseTaskQueue.Add(task);
            };

            if (Native.JsSetPromiseContinuationCallback(promiseContinuationCallback, IntPtr.Zero) != JavaScriptErrorCode.NoError)
            {
                throw new InvalidOperationException("failed to setup callback for ES6 Promise");
            }
            StartPromiseTaskLoop(shutdownCTS.Token);



            JSGlobalObject = JavaScriptValue.GlobalObject;
            GlobalObject   = new JSValue(ServiceNode, JSGlobalObject);
            Leave();


            contextService = new ContextService(shutdownCTS);
            ServiceNode.PushService <IContextService>(contextService);
            timerService = GlobalObject.InitTimer();
        }
Ejemplo n.º 2
0
        public string Init(JavaScriptRuntimeAttributes jsrt = JavaScriptRuntimeAttributes.None)
        {
            JavaScriptContext context;

            Native.ThrowIfError(Native.JsCreateRuntime(jsrt, null, out runtime));
            Native.ThrowIfError(Native.JsCreateContext(runtime, out context));
            ResetContext(context);

            // ES6 Promise callback
            JavaScriptPromiseContinuationCallback promiseContinuationCallback = delegate(JavaScriptValue task, IntPtr callbackState)
            {
                taskQueue.Enqueue(task);
            };

            if (Native.JsSetPromiseContinuationCallback(promiseContinuationCallback, IntPtr.Zero) != JavaScriptErrorCode.NoError)
            {
                return("failed to setup callback for ES6 Promise");
            }

            foreach (var one in AllowNameSpace)
            {
                Native.ThrowIfError(Native.JsProjectWinRTNamespace(one));
            }

            if (Native.JsStartDebugging() != JavaScriptErrorCode.NoError)
            {
                return("failed to start debugging.");
            }

            return("NoError");
        }
Ejemplo n.º 3
0
        public NKSChakraContext(int id, JavaScriptContext context, Dictionary <string, object> options) : base(id)
        {
            _async_queue = TaskScheduler.Current;

            this._context = context;

            JavaScriptPromiseContinuationCallback promiseContinuationCallback = delegate(JavaScriptValue jsTask, IntPtr callbackState)
            {
                _jsTaskQueue.Enqueue(jsTask);
            };

            ensureOnEngineThread(() =>
            {
                NKSChakraContext.currentContext = context;

                JavaScriptContext.Current = context;

#if WINDOWS_UWP
                Native.ThrowIfError(Native.JsSetPromiseContinuationCallback(promiseContinuationCallback, IntPtr.Zero));
                Native.ThrowIfError(Native.JsProjectWinRTNamespace("Windows"));
#endif
                // if (options.ContainsKey("nk.ScriptingDebug") && ((bool)options["nk.ScriptingDebug"] == true);
                Native.ThrowIfError(Native.JsStartDebugging());
            });
        }
Ejemplo n.º 4
0
        internal BaristaExecutionScope(BaristaContext context, IPromiseTaskQueue taskQueue, Action release)
        {
            m_context          = context;
            m_promiseTaskQueue = taskQueue;
            m_release          = release;

            //Clear and set the task queue if specified
            m_promiseContinuationCallbackDelegateHandle = default(GCHandle);
            if (m_promiseTaskQueue != null)
            {
                m_promiseTaskQueue.Clear();
                JavaScriptPromiseContinuationCallback promiseContinuationCallback = (IntPtr taskHandle, IntPtr callbackState) =>
                {
                    try
                    {
                        PromiseContinuationCallback(taskHandle, callbackState);
                    }
                    catch
                    {
                        //Do Nothing.
                    }
                };
                m_promiseContinuationCallbackDelegateHandle = GCHandle.Alloc(promiseContinuationCallback);
                m_context.Engine.JsSetPromiseContinuationCallback(promiseContinuationCallback, IntPtr.Zero);
            }
        }
        public ChakraCoreJavaScriptGenerator(ResourceScriptFactory resourceScriptFactory)
        {
            _resourceScriptFactory       = resourceScriptFactory;
            _promiseContinuationCallback = PromiseContinuationCallback;

            _dispatcher.Invoke(() =>
            {
                _runtime             = JavaScriptRuntime.Create(JavaScriptRuntimeAttributes.EnableExperimentalFeatures);
                _runtime.MemoryLimit = ChakraCoreSettings.MemoryLimit;
            });
        }
Ejemplo n.º 6
0
        public ChakraHost()
        {
            var code = Native.JsCreateRuntime(JavaScriptRuntimeAttributes.None, null, out runtime);

            if (code != JavaScriptErrorCode.NoError)
            {
                throw new Exception("failed to create runtime.");
            }

            code = Native.JsCreateContext(runtime, out context);
            if (code != JavaScriptErrorCode.NoError)
            {
                throw new Exception("failed to create execution context.");
            }

            ResetContext();

            // ES6 Promise callback
            JavaScriptPromiseContinuationCallback promiseContinuationCallback =
                delegate(JavaScriptValue task, IntPtr callbackState)
            {
                promiseCallback = task;
            };

            code = Native.JsSetPromiseContinuationCallback(promiseContinuationCallback, IntPtr.Zero);
            if (code != JavaScriptErrorCode.NoError)
            {
                throw new Exception("failed to setup callback for ES6 Promise");
            }

            // Projections
            code = Native.JsProjectWinRTNamespace("ChakraBridge");
            if (code != JavaScriptErrorCode.NoError)
            {
                throw new Exception("failed to project ChakraBridge namespace.");
            }



            PrintJavaScriptNativeFunction = PrintFun.PrintJavaScriptNativeFunction;
            DefineHostCallback("print", PrintJavaScriptNativeFunction);
            //ProjectObjectToGlobal(new Console(), "console");

#if DEBUG
            // Debug
            if (Native.JsStartDebugging() != JavaScriptErrorCode.NoError)
            {
                throw new Exception("failed to start debugging.");
            }
#endif
        }
Ejemplo n.º 7
0
        public string init()
        {
            running = false;
            result  = "";
            JavaScriptContext context;

            if (Native.JsCreateRuntime(JavaScriptRuntimeAttributes.AllowScriptInterrupt, null, out runtime) != JavaScriptErrorCode.NoError)
            {
                return("failed to create runtime.");
            }

            if (Native.JsCreateContext(runtime, out context) != JavaScriptErrorCode.NoError)
            {
                return("failed to create execution context.");
            }

            if (Native.JsSetCurrentContext(context) != JavaScriptErrorCode.NoError)
            {
                return("failed to set current context.");
            }

            // ES6 Promise callback
            JavaScriptPromiseContinuationCallback promiseContinuationCallback = delegate(JavaScriptValue task, IntPtr callbackState)
            {
                taskQueue.Enqueue(task);
            };

            if (Native.JsSetPromiseContinuationCallback(promiseContinuationCallback, IntPtr.Zero) != JavaScriptErrorCode.NoError)
            {
                return("failed to setup callback for ES6 Promise");
            }

            if (Native.JsProjectWinRTNamespace("Windows") != JavaScriptErrorCode.NoError)
            {
                return("failed to project windows namespace.");
            }

            if (Native.JsProjectWinRTNamespace("LittleTrainingRobotHardwareIO") != JavaScriptErrorCode.NoError)
            {
                return("failed to project windows namespace.");
            }

            return("NoError");
        }
Ejemplo n.º 8
0
        public string Init()
        {
            result = "";
            JavaScriptContext context;

            if (Native.JsCreateRuntime(JavaScriptRuntimeAttributes.AllowScriptInterrupt, null, out runtime) != JavaScriptErrorCode.NoError)
            {
                return("failed to create runtime.");
            }

            if (Native.JsCreateContext(runtime, out context) != JavaScriptErrorCode.NoError)
            {
                return("failed to create execution context.");
            }

            if (Native.JsSetCurrentContext(context) != JavaScriptErrorCode.NoError)
            {
                return("failed to set current context.");
            }

            // ES6 Promise callback
            JavaScriptPromiseContinuationCallback promiseContinuationCallback = delegate(JavaScriptValue task, IntPtr callbackState)
            {
            };

            if (Native.JsSetPromiseContinuationCallback(promiseContinuationCallback, IntPtr.Zero) != JavaScriptErrorCode.NoError)
            {
                return("failed to setup callback for ES6 Promise");
            }

            if (Native.JsProjectWinRTNamespace("Windows") != JavaScriptErrorCode.NoError)
            {
                return("failed to project windows namespace.");
            }

            if (Native.JsProjectWinRTNamespace("IoTBlocklyHelper") != JavaScriptErrorCode.NoError)
            {
                return("failed to project windows namespace.");
            }

            runtime.MemoryLimit = (UIntPtr)5000000; // limit JS memory

            return("NoError");
        }
Ejemplo n.º 9
0
        public string init()
        {
            JavaScriptContext context;

            if (Native.JsCreateRuntime(JavaScriptRuntimeAttributes.None, null, out runtime) != JavaScriptErrorCode.NoError)
            {
                return("failed to create runtime.");
            }

            if (Native.JsCreateContext(runtime, out context) != JavaScriptErrorCode.NoError)
            {
                return("failed to create execution context.");
            }

            if (Native.JsSetCurrentContext(context) != JavaScriptErrorCode.NoError)
            {
                return("failed to set current context.");
            }

            // ES6 Promise callback
            JavaScriptPromiseContinuationCallback promiseContinuationCallback = delegate(JavaScriptValue task, IntPtr callbackState)
            {
                taskQueue.Enqueue(task);
            };

            if (Native.JsSetPromiseContinuationCallback(promiseContinuationCallback, IntPtr.Zero) != JavaScriptErrorCode.NoError)
            {
                return("failed to setup callback for ES6 Promise");
            }

            if (Native.JsProjectWinRTNamespace("Windows") != JavaScriptErrorCode.NoError)
            {
                return("failed to project windows namespace.");
            }

            if (Native.JsStartDebugging() != JavaScriptErrorCode.NoError)
            {
                return("failed to start debugging.");
            }

            return("NoError");
        }
Ejemplo n.º 10
0
 public static void SetPromiseContinuationCallback(JavaScriptPromiseContinuationCallback callback, IntPtr callbackState)
 {
     Native.ThrowIfError(Native.JsSetPromiseContinuationCallback(callback, callbackState));
 }
Ejemplo n.º 11
0
 internal static extern JavaScriptErrorCode JsSetPromiseContinuationCallback(JavaScriptPromiseContinuationCallback promiseContinuationCallback, IntPtr callbackState);
Ejemplo n.º 12
0
        public ChakraHost()
        {
            if (Native.JsCreateRuntime(JavaScriptRuntimeAttributes.None, null, out runtime) !=
                JavaScriptErrorCode.NoError)
            {
                throw new Exception("failed to create runtime.");
            }

            if (Native.JsCreateContext(runtime, out context) != JavaScriptErrorCode.NoError)
            {
                throw new Exception("failed to create execution context.");
            }

            if (Native.JsSetCurrentContext(context) != JavaScriptErrorCode.NoError)
            {
                throw new Exception("failed to set current context.");
            }

            // ES6 Promise callback
            JavaScriptPromiseContinuationCallback promiseContinuationCallback =
                delegate(JavaScriptValue task, IntPtr callbackState)
            {
                promiseCallback = task;
            };

            if (Native.JsSetPromiseContinuationCallback(promiseContinuationCallback, IntPtr.Zero) !=
                JavaScriptErrorCode.NoError)
            {
                throw new Exception("failed to setup callback for ES6 Promise");
            }

            // Bind to global object
            // setTimeout
            SetTimeoutJavaScriptNativeFunction = SetTimeout.SetTimeoutJavaScriptNativeFunction;
            DefineHostCallback("setTimeout", SetTimeoutJavaScriptNativeFunction);

            SendToHostJavaScriptNativeFunction = CommunicationManager.SendToHostJavaScriptNativeFunction;
            DefineHostCallback("sendToHost", SendToHostJavaScriptNativeFunction);

            // Projections
            if (Native.JsProjectWinRTNamespace("ChakraBridge") != JavaScriptErrorCode.NoError)
            {
                throw new Exception("failed to project ChakraBridge namespace.");
            }

            this.window = new Window();

            ProjectObjectToGlobal(new Console(), "console");
            ProjectObjectToGlobal(this.window, "window");
            ProjectObjectToGlobal(this.window.navigator, "navigator");
            ProjectObjectToGlobal(this.window.document, "document");

            // Add references
            RunScript("XMLHttpRequest = ChakraBridge.XMLHttpRequest;");
            RunScript("HTMLCanvasElement = ChakraBridge.IHTMLCanvasElement;");
            RunScript("atob = window.atob;");
            RunScript("btoa = window.btoa;");

#if DEBUG
            // Debug
            if (Native.JsStartDebugging() != JavaScriptErrorCode.NoError)
            {
                throw new Exception("failed to start debugging.");
            }
#endif
        }
 internal static extern JavaScriptErrorCode JsSetPromiseContinuationCallback(JavaScriptPromiseContinuationCallback promiseContinuationCallback, IntPtr callbackState);