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(); }
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"); }
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()); }); }
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; }); }
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 }
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"); }
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"); }
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"); }
public static void SetPromiseContinuationCallback(JavaScriptPromiseContinuationCallback callback, IntPtr callbackState) { Native.ThrowIfError(Native.JsSetPromiseContinuationCallback(callback, callbackState)); }
internal static extern JavaScriptErrorCode JsSetPromiseContinuationCallback(JavaScriptPromiseContinuationCallback promiseContinuationCallback, IntPtr callbackState);
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 }