Example #1
0
        // MAIN PROCESS PIPE EVENT LOOP
        private async Task _processServerMessages(Stream stream)
        {
            var message = await readObjectAsync(stream);

            if (message == null)
            {
                return;
            }

            if (message.command == NKRemotingMessage.Command.NKevaluateJavaScript)
            {
                var _ = context.NKevaluateJavaScript(message.args[0], message.args[1]);
            }
            else if (message.command == NKRemotingMessage.Command.NKEvent)
            {
                var     eventType   = message.args[0];
                NKEvent eventObject = new NKEvent((IDictionary <string, object>)(NKData.jsonDeserialize(message.args[1])));
                NKEventEmitter.global.emit <NKEvent>(eventType, eventObject, false);
            }

            if (!cancelToken.IsCancellationRequested)
            {
                await _processServerMessages(stream);
            }
            else
            {
                return;
            }
        }
Example #2
0
        private void eventForwarderFromRenderer(string eventType, NKEvent nke)
        {
            var handshake = new NKRemotingMessage();

            handshake.command = NKRemotingMessage.Command.NKEvent;
            var eventSerialized = NKData.jsonSerialize(nke);

            handshake.args = new string[] { eventType, eventSerialized };
            writeObject(asyncPipe, handshake);
        }
Example #3
0
        // RENDERER PROCESS PIPE EVENT LOOP
        private async Task _processClientMessages()
        {
            var message = await readObjectAsync(syncPipeIn);

            if (message == null)
            {
                NKLogging.log("!Renderer Received Empty Message");
                cancelTokenSource.Cancel();
                return;
            }

            if (message.command == NKRemotingMessage.Command.NKScriptMessageSync)
            {
                var name = message.args[0];
                Dictionary <string, object> body = null;
                try
                {
                    body = context.NKdeserialize(message.args[1]) as Dictionary <string, object>;
                }
                catch (Exception ex)
                {
                    NKLogging.log("!Renderer Message Deserialization Error: " + ex.Message);
                }
                var nks = new NKScriptMessage(name, body);

                NKScriptMessageHandler handler = null;
                if (_localHandlers.ContainsKey(name))
                {
                    handler = _localHandlers[name];
                }
                else
                {
                    int target = Int32.Parse(body["$target"].ToString());
                    handler = NKScriptChannel.getNative(target);
                }
                if (handler != null)
                {
                    var nkr = new NKRemotingMessage();
                    nkr.command = NKRemotingMessage.Command.NKScriptMessageSyncReply;

                    try
                    {
                        var result = handler.didReceiveScriptMessageSync(nks);
                        nkr.args = new string[] { context.NKserialize(result) };
                    } catch (Exception ex)
                    {
                        NKLogging.log("!Renderer Message Processing Error: " + ex.Message);
                        NKLogging.log(ex.StackTrace);
                        nkr.args = new string[] { };
                    }
                    writeObject(syncPipeOut, nkr);
                }
                else
                {
                    NKLogging.log("+Renderer Received Unknown Script Message Sync");
                }
            }
            else if (message.command == NKRemotingMessage.Command.NKScriptMessage)
            {
                var name = message.args[0];
                Dictionary <string, object> body = null;
                try
                {
                    body = context.NKdeserialize(message.args[1]) as Dictionary <string, object>;
                }
                catch (Exception ex)
                {
                    NKLogging.log("!Renderer Message Deserialization Error: " + ex.Message);
                }
                var nks = new NKScriptMessage(name, body);

                NKScriptMessageHandler handler = null;
                if (_localHandlers.ContainsKey(name))
                {
                    handler = _localHandlers[name];
                }
                else
                {
                    int target = Int32.Parse(body["$target"].ToString());
                    handler = NKScriptChannel.getNative(target);
                }
                if (handler != null)
                {
                    handler.didReceiveScriptMessage(nks);
                }
                else
                {
                    NKLogging.log("+Renderer Received Unknown Script Message " + message.args[1]);
                }
            }
            else if (message.command == NKRemotingMessage.Command.NKRemotingClose)
            {
                try
                {
                    syncPipeIn.Close();
                    syncPipeOut.Close();
                    asyncPipe.Close();
                }
                catch { }

                Environment.Exit(0);
            }
            else if (message.command == NKRemotingMessage.Command.NKEvent)
            {
                var     eventType   = message.args[0];
                NKEvent eventObject = new NKEvent((IDictionary <string, object>)(NKData.jsonDeserialize(message.args[1])));
                NKEventEmitter.global.emit <NKEvent>(eventType, eventObject, false);
            }

            if (!cancelToken.IsCancellationRequested)
            {
                await _processClientMessages();
            }
            else
            {
                return;
            }
        }
Example #4
0
        // Replies to main are sent directly to the webContents window in this local process that sent the original message
        public void ipcReply(int dest, string channel, string replyId, object result)
        {
            var payload = new NKEvent(0, channel, replyId, new[] { result });

            _window.events.emit("NKE.IPCReplytoMain", payload, false);
        }
        // Forward replies to renderer to the events queue for that renderer, using global queue since we may be cross process
        public static void ipcReply(int dest, string channel, string replyId, object result)
        {
            var payload = new NKEvent(0, channel, replyId, new [] { result });

            globalEvents.emit("NKE.IPCReplytoRenderer." + dest.ToString(), payload, true);
        }
 // Replies to main are sent directly to the webContents window in this local process that sent the original message
 public void ipcReply(int dest, string channel, string replyId, object result)
 {
     var payload = new NKEvent(0, channel, replyId, new[] { result });
     _window.events.emit("NKE.IPCReplytoMain", payload, false);
 }
Example #7
0
        // Messages to main are sent to the global events queue, potentially cross-process
        public void ipcSend(string channel, string replyId, object[] arg)
        {
            var payload = new NKEvent(0, channel, replyId, arg);

            globalEvents.emit("NKE.IPCtoMain", payload, true);
        }
 // Replies to renderer to the window events queue for that renderer
 public void ipcReply(int dest, string channel, string replyId, object result)
 {
     var payload = new NKEvent(0, channel, replyId, new[] { result });
     _browserWindow.events.emit("NKE.IPCReplytoRenderer", payload);
 }
 // Messages to main are sent to the global events queue, potentially cross-process
 public void ipcSend(string channel, string replyId, object[] arg)
 {
     var payload = new NKEvent(0, channel, replyId, arg);
     globalEvents.emit("NKE.IPCtoMain", payload, true);
 }
        // RENDERER PROCESS PIPE EVENT LOOP
        private async Task _processClientMessages()
        {
             var message = await readObjectAsync(syncPipeIn);
            if (message == null)
            {
                NKLogging.log("!Renderer Received Empty Message");
                cancelTokenSource.Cancel();
                return;
            }

            if (message.command == NKRemotingMessage.Command.NKScriptMessageSync)
            {
          
                var name = message.args[0];
                Dictionary<string, object> body = null;
                try
                {
                    body = context.NKdeserialize(message.args[1]) as Dictionary<string, object>;
                }
                catch (Exception ex)
                {
                    NKLogging.log("!Renderer Message Deserialization Error: " + ex.Message);
                }
                var nks = new NKScriptMessage(name, body);

                NKScriptMessageHandler handler = null;
                if (_localHandlers.ContainsKey(name))
                    handler = _localHandlers[name];
                else
                {
                    int target = Int32.Parse(body["$target"].ToString());
                    handler = NKScriptChannel.getNative(target);
                }
                if (handler != null)
                {
                    var nkr = new NKRemotingMessage();
                    nkr.command = NKRemotingMessage.Command.NKScriptMessageSyncReply;

                    try
                    {
                        var result = handler.didReceiveScriptMessageSync(nks);
                        nkr.args = new string[] { context.NKserialize(result) };
                    } catch (Exception ex)
                    {
                        NKLogging.log("!Renderer Message Processing Error: " + ex.Message);
                        NKLogging.log(ex.StackTrace);
                        nkr.args = new string[] { };
                    }
                    writeObject(syncPipeOut, nkr);
                }
                else
                {
                    NKLogging.log("+Renderer Received Unknown Script Message Sync");             
                }
            }
            else if (message.command == NKRemotingMessage.Command.NKScriptMessage)
            {

                var name = message.args[0];
                Dictionary<string, object> body = null;
                try
                {
                    body = context.NKdeserialize(message.args[1]) as Dictionary<string, object>;
                }
                catch (Exception ex)
                {
                    NKLogging.log("!Renderer Message Deserialization Error: " + ex.Message);

                }
                var nks = new NKScriptMessage(name, body);

                NKScriptMessageHandler handler = null;
                if (_localHandlers.ContainsKey(name))
                    handler = _localHandlers[name];
                else
                {
                    int target = Int32.Parse(body["$target"].ToString());
                    handler = NKScriptChannel.getNative(target);
                }
                if (handler != null)
                {
                      handler.didReceiveScriptMessage(nks);
              } else
                {
                    NKLogging.log("+Renderer Received Unknown Script Message " + message.args[1]);

                }
            }
            else if (message.command == NKRemotingMessage.Command.NKRemotingClose)
            {
                try
                {
                    syncPipeIn.Close();
                    syncPipeOut.Close();
                    asyncPipe.Close();

                }
                catch { }

                Environment.Exit(0);
            }
            else if (message.command == NKRemotingMessage.Command.NKEvent)
            {
                var eventType = message.args[0];
                NKEvent eventObject = new NKEvent((IDictionary<string, object>)(NKData.jsonDeserialize(message.args[1])));
                NKEventEmitter.global.emit<NKEvent>(eventType, eventObject, false);
            }

            if (!cancelToken.IsCancellationRequested)
                await _processClientMessages();
            else
                return;
        }
 // Messages to renderer are sent to the window events queue for that renderer which will be in same process as ipcRenderer
 public void ipcSend(string channel, string replyId, object[] arg)
 {
     var payload = new NKEvent(0, channel, replyId, arg);
     _browserWindow.events.emit("NKE.IPCtoRenderer", payload);
 }
        // MAIN PROCESS PIPE EVENT LOOP
        private async Task _processServerMessages(Stream stream)
        {
            var message = await readObjectAsync(stream);
            if (message == null)
                return;

            if (message.command == NKRemotingMessage.Command.NKevaluateJavaScript)
            {
                var _ = context.NKevaluateJavaScript(message.args[0], message.args[1]);
            }
            else if (message.command == NKRemotingMessage.Command.NKEvent)
            {
                var eventType = message.args[0];
                NKEvent eventObject = new NKEvent((IDictionary<string, object>)(NKData.jsonDeserialize(message.args[1])));
                NKEventEmitter.global.emit<NKEvent>(eventType, eventObject, false);
            } 

            if (!cancelToken.IsCancellationRequested)
                await _processServerMessages(stream);
            else
                return ;
        }
 private void eventForwarderFromRenderer(string eventType, NKEvent nke)
 {
     var handshake = new NKRemotingMessage();
     handshake.command = NKRemotingMessage.Command.NKEvent;
     var eventSerialized = NKData.jsonSerialize(nke);
     handshake.args = new string[] { eventType, eventSerialized };
     writeObject(asyncPipe, handshake);
 }
Example #14
0
 // Forward replies to renderer to the events queue for that renderer, using global queue since we may be cross process
 public static void ipcReply(int dest, string channel, string replyId, object result)
 {
     var payload = new NKEvent(0, channel, replyId, new [] { result });
     globalEvents.emit("NKE.IPCReplytoRenderer." + dest.ToString(), payload, true);
 }
Example #15
0
        // Replies to renderer to the window events queue for that renderer
        public void ipcReply(int dest, string channel, string replyId, object result)
        {
            var payload = new NKEvent(0, channel, replyId, new[] { result });

            _browserWindow.events.emit("NKE.IPCReplytoRenderer", payload);
        }
Example #16
0
        // Messages to renderer are sent to the window events queue for that renderer which will be in same process as ipcRenderer
        public void ipcSend(string channel, string replyId, object[] arg)
        {
            var payload = new NKEvent(0, channel, replyId, arg);

            _browserWindow.events.emit("NKE.IPCtoRenderer", payload);
        }