public void HandleMessage(Message message, RouterSocket serverSocket, PublisherSocket ioPub)
        {
            this.logger.Debug(string.Format("Message Content {0}", message.Content));
            ExecuteRequest executeRequest = JsonSerializer.Deserialize <ExecuteRequest>(message.Content);

            this.logger.Info(string.Format("Execute Request received with code {0}", executeRequest.Code));

            // 1: Send Busy status on IOPub
            this.SendMessageToIOPub(message, ioPub, StatusValues.Busy);

            // 2: Send execute input on IOPub
            this.SendInputMessageToIOPub(message, ioPub, executeRequest.Code);

            // 3: Evaluate the C# code
            IOPubConsole ioPubConsole = new IOPubConsole(message, ioPub, this.messageSender, this.executionCount, this.logger);

            ioPubConsole.RedirectConsole();
            string          code    = executeRequest.Code;
            ExecutionResult results = this.replEngine.Execute(code);

            ioPubConsole.CancelRedirect();

            string codeOutput     = this.GetCodeOutput(results);
            string codeHtmlOutput = this.GetCodeHtmlOutput(results);

            Dictionary <string, object> data = new Dictionary <string, object>()
            {
                { "text/plain", codeOutput },
                { "text/html", codeHtmlOutput }
            };

            DisplayData displayData = new DisplayData()
            {
                Data = data,
            };

            // 4: Send execute reply to shell socket
            this.SendExecuteReplyMessage(message, serverSocket);

            // 5: Send execute result message to IOPub
            if (results.OutputResultWithColorInformation.Any())
            {
                this.SendOutputMessageToIOPub(message, ioPub, displayData);
            }

            // 6: Send IDLE status message to IOPub
            this.SendMessageToIOPub(message, ioPub, StatusValues.Idle);

            this.executionCount += 1;
        }
        public void HandleMessage(Message message, RouterSocket serverSocket, PublisherSocket ioPub)
        {
            this.logger.Debug(string.Format("Message Content {0}", message.Content));
            ExecuteRequest executeRequest = message.Content.ToObject <ExecuteRequest>();

            this.logger.Info(string.Format("Execute Request received with code \n{0}", executeRequest.Code));

            // 1: Send Busy status on IOPub
            this.messageSender.SendStatus(message, ioPub, StatusValues.Busy);

            // 2: Send execute input on IOPub
            if (!executeRequest.Silent)
            {
                this.executionCount += 1;
                this.SendExecuteInputMessageToIOPub(message, ioPub, executeRequest.Code);
            }

            // 3: Evaluate the C# code
            IOPubConsole ioPubConsole = new IOPubConsole(message, ioPub, this.messageSender, this.executionCount, this.logger);

            ioPubConsole.RedirectConsole();
            string          code    = executeRequest.Code;
            ExecutionResult results = this.replEngine.Execute(code);

            ioPubConsole.CancelRedirect();

            if (!results.IsError)
            {
                // 4: Send execute result message to IOPub
                if (results.OutputResultWithColorInformation.Any())
                {
                    string codeOutput     = this.GetCodeOutput(results);
                    string codeHtmlOutput = this.GetCodeHtmlOutput(results);

                    JObject data = new JObject()
                    {
                        { "text/plain", codeOutput },
                        { "text/html", codeHtmlOutput }
                    };

                    DisplayData displayData = new DisplayData()
                    {
                        Data = data,
                    };
                    this.SendDisplayDataMessageToIOPub(message, ioPub, displayData);
                }

                // 5: Send execute reply to shell socket
                this.SendExecuteReplyOkMessage(message, serverSocket);
            }
            else
            {
                var     ex           = results.CompileError != null ? results.CompileError : results.ExecuteError;
                dynamic errorContent = new JObject();
                errorContent.execution_count = this.executionCount;
                errorContent.ename           = ex.GetType().ToString();
                errorContent.evalue          = ex.Message;
                var trace = new JArray(ex.StackTrace.Split('\n'));
                trace.AddFirst(ex.Message);
                errorContent.traceback = trace;

                // 6: Send error message to IOPub
                this.SendErrorMessageToIOPub(message, ioPub, errorContent);

                // 7: Send execute reply message to shell socket
                this.SendExecuteReplyErrorMessage(message, serverSocket, errorContent);
            }

            // 8: Send IDLE status message to IOPub
            this.messageSender.SendStatus(message, ioPub, StatusValues.Idle);
        }