public bool ProcessMessage(CefBrowser browser, CefProcessId sourceProcess, CefProcessMessage processMessage) { if (processMessage == null) { throw new ArgumentNullException("processMessage"); } // native if (processMessage.Name == "native") { var message = MessageUtility.DeserializeMessage <string>(processMessage); if (message.CallbackId != null) { var returnJson = message.Data; var callback = GetCallback(message.CallbackId.Value); if (callback != null) { callback.Execute(returnJson); } } return(true); } // call function else if (processMessage.Name == "callFunction") { var message = MessageUtility.DeserializeMessage <CallFunction>(processMessage); var functionName = message.Data.Name; var data = message.Data.Data; if (Functions.ContainsKey(functionName)) { if (data != Undefined.Value) { Functions[functionName].Execute(data); } else { Functions[functionName].Execute(); } } else { GeneralLog.Error(string.Format("Call function - function {0} is not registered.", functionName)); } return(true); } return(false); }
private void ProcessMessageNative(CefBrowser browser, CefProcessId sourceProcess, CefProcessMessage processMessage) { var callNativeResult = MessageUtility.DeserializeMessage <CallNativeResult>(processMessage); if (callNativeResult.CallbackId != null) { var callback = GetCallback(callNativeResult.CallbackId.Value); if (callback == null) { throw new InvalidOperationException(string.Format("Callback '{0}' not found.", callNativeResult.CallbackId.Value)); } callback.Execute(callNativeResult.JsonResult); } }
private void ProcessMessageCallFunction(CefBrowser browser, CefProcessId sourceProcess, CefProcessMessage processMessage) { var callFunction = MessageUtility.DeserializeMessage <CallFunction>(processMessage); if (!Functions.ContainsKey(callFunction.Name)) { throw new InvalidOperationException(string.Format("Function '{0}' not found.", callFunction.Name)); } JToken returnValue = null; if (callFunction.Data != Value.Undefined) { returnValue = Functions[callFunction.Name].Execute(callFunction.Data); } else { returnValue = Functions[callFunction.Name].Execute(); } MessageUtility.SendMessage(CefProcessId.Browser, CefBrowser, "callFunctionResult", new CallFunctionResult { Result = returnValue, CallbackId = callFunction.CallbackId }); }
public bool ProcessMessage(CefBrowser browser, CefProcessId sourceProcess, CefProcessMessage processMessage) { if (processMessage.Name == "native") { var message = MessageUtility.DeserializeMessage <CallNative>(processMessage); BaseMainApplication.Current.InvokeOnMainAsync(() => { var returnData = (object)null; var exception = (Exception)null; // native found if (ProcessMessages.ContainsKey(message.Data.Name)) { try { returnData = ProcessMessages[message.Data.Name](message.Data.Json); } catch (Exception e) { exception = e; returnData = null; } } else { exception = new NativeNotFoundException(message.Data.Name); } // callback if (message.CallbackId != null) { var nativeResponse = new NativeResponse(); if (exception != null) { nativeResponse.Exception = ExceptionUtility.CreateJavascriptException(exception); nativeResponse.Type = NativeResponseType.Exception; nativeResponse.Value = null; } else { if (returnData == Undefined.Value) { nativeResponse.Exception = null; nativeResponse.Type = NativeResponseType.Undefined; nativeResponse.Value = null; } else { nativeResponse.Exception = null; nativeResponse.Type = NativeResponseType.Value; nativeResponse.Value = returnData; } } var returnJson = JsonUtility.SerializeToJson(nativeResponse); MessageUtility.SendMessage(browser, "native", message.CallbackId, returnJson); } }).ContinueWith(t => { GeneralLog.Error("Native call exception.", t.Exception); }, TaskContinuationOptions.OnlyOnFaulted); return(true); } return(false); }
private void ProcessMessageNative(CefBrowser browser, CefProcessId sourceProcess, CefProcessMessage processMessage) { var callNative = MessageUtility.DeserializeMessage <CallNative>(processMessage); Application.Current.InvokeOnMainAsync(() => { object returnData = null; Exception exception = null; NativeFunctionDelegate handler; NativeFunctionDelegates.TryGetValue(callNative.Name, out handler); // function call if (handler != null) { try { returnData = handler(callNative.Json); } catch (Exception e) { exception = e; } } else { exception = new NativeNotFoundException(callNative.Name); } // callback if (callNative.CallbackId != null) { var nativeResponse = new NativeResponse(); if (exception != null) { nativeResponse.Exception = ExceptionUtility.CreateJavascriptException(exception); nativeResponse.Type = NativeResponseType.Exception; nativeResponse.Value = null; } else { if (returnData == Value.Undefined) { nativeResponse.Exception = null; nativeResponse.Type = NativeResponseType.Undefined; nativeResponse.Value = null; } else { nativeResponse.Exception = null; nativeResponse.Type = NativeResponseType.Value; nativeResponse.Value = returnData; } } var returnJson = JsonUtility.SerializeToJson(nativeResponse); MessageUtility.SendMessage(CefProcessId.Renderer, browser, "native", new CallNativeResult { JsonResult = returnJson, CallbackId = callNative.CallbackId }); } }).ContinueWith(t => { Logger.Error("Native call exception.", t.Exception); }, TaskContinuationOptions.OnlyOnFaulted); }
private void ProcessMessageCallFunction(CefBrowser browser, CefProcessId sourceProcess, CefProcessMessage processMessage) { var message = MessageUtility.DeserializeMessage <CallFunctionResult>(processMessage); Application.Current.Window.SetCallFunctionResult(message.CallbackId, message.Result); }
private void ProcessMessageSyncProperty(CefBrowser browser, CefProcessId sourceProcess, CefProcessMessage processMessage) { var syncProperty = MessageUtility.DeserializeMessage <SyncProperty>(processMessage); ChildApplication.Current.SetSyncProperty(syncProperty.Name, syncProperty.Value); }