コード例 #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;
            }
        }
コード例 #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);
        }
コード例 #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;
            }
        }
コード例 #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);
        }
コード例 #5
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);
        }
コード例 #6
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);
 }
コード例 #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);
        }
コード例 #8
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);
 }
コード例 #9
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);
 }
コード例 #10
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;
        }
コード例 #11
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);
 }
コード例 #12
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 ;
        }
コード例 #13
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);
 }
コード例 #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);
 }
コード例 #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);
        }
コード例 #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);
        }