示例#1
0
        private static void StartShellLoop(string shellAddress, string ioPubAddress)
        {
            ShellRouterSocket.Bind(shellAddress);
            Log.Info($"Bound shell server to address {shellAddress}");

            ShellPublisherSocket.Bind(ioPubAddress);
            Log.Info($"Bound IO pub to address {ioPubAddress}");

            while (!StopEvent.Wait(0))
            {
                var message = GetNextMessage();

                Log.Info($"Received message {JsonSerializer.Serialize(message)}");

                if (MessageHandlers.TryGetValue(message.Header.MessageType, out IShellMessageHandler handler))
                {
                    Log.Info($"Sending message to {message.Header.MessageType} handler");
                    handler.HandleMessage(message, ShellRouterSocket, ShellPublisherSocket);
                    Log.Info("Message handling complete");
                }
                else
                {
                    Log.Error($"No message handler found for message type {message.Header.MessageType}");
                }
            }
        }
示例#2
0
        private static Message GetNextMessage()
        {
            var message = new Message();

            // There may be additional ZMQ identities attached; read until the delimiter <IDS|MSG>"
            // and store them in message.identifiers
            // http://ipython.org/ipython-doc/dev/development/messaging.html#the-wire-protocol
            var delimAsBytes = Encoding.ASCII.GetBytes(Constants.Delimiter);

            while (true)
            {
                var delim = ShellRouterSocket.ReceiveFrameBytes();
                if (delim.SequenceEqual(delimAsBytes))
                {
                    break;
                }

                message.Identifiers.Add(delim);
            }

            // Getting Hmac
            message.HMac = ShellRouterSocket.ReceiveFrameString();
            Log.Info(message.HMac);

            // Getting Header
            var header = ShellRouterSocket.ReceiveFrameString();

            Log.Info(header);

            message.Header = JsonSerializer.Deserialize <Header>(header);

            // Getting parent header
            var parentHeader = ShellRouterSocket.ReceiveFrameString();

            Log.Info(parentHeader);

            message.ParentHeader = JsonSerializer.Deserialize <Header>(parentHeader);

            // Getting metadata
            var metadata = ShellRouterSocket.ReceiveFrameString();

            Log.Info(metadata);

            message.Metadata = JsonSerializer.Deserialize <Dictionary <string, object> >(metadata);

            // Getting content
            var content = ShellRouterSocket.ReceiveFrameString();

            Log.Info(content);

            message.Content = content;

            return(message);
        }