Пример #1
0
        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);
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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
            });
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        private void ProcessMessageCallFunction(CefBrowser browser, CefProcessId sourceProcess, CefProcessMessage processMessage)
        {
            var message = MessageUtility.DeserializeMessage <CallFunctionResult>(processMessage);

            Application.Current.Window.SetCallFunctionResult(message.CallbackId, message.Result);
        }
Пример #7
0
        private void ProcessMessageSyncProperty(CefBrowser browser, CefProcessId sourceProcess, CefProcessMessage processMessage)
        {
            var syncProperty = MessageUtility.DeserializeMessage <SyncProperty>(processMessage);

            ChildApplication.Current.SetSyncProperty(syncProperty.Name, syncProperty.Value);
        }