Exemplo n.º 1
0
        private static async Task RenderUiAndHandleInputAsync(ITcpPeerMessenger messenger, MessageLog messageLog, bool isChatbotMode)
        {
            IMessengerCommandHandler commandHandler = new MessengerCommandHandler(messenger, messageLog);
            IMessengerCommandParser  commandParser  = new MessengerCommandParser();

            int headerHeight   = 2;
            int splitterHeight = 1;
            int inputHeight    = 5;

            Header header = new Header(isChatbotMode);

            int            logViewHeight  = Console.WindowHeight - headerHeight - splitterHeight - inputHeight;
            int            logViewTop     = headerHeight;
            MessageLogView messageLogView = new MessageLogView(logViewTop, logViewHeight, messageLog, messenger.EndPoint);

            int splitterTop             = headerHeight + logViewHeight;
            HorizontalSplitter splitter = new HorizontalSplitter(splitterTop);

            int inputTop = headerHeight + splitterHeight + logViewHeight;
            MessageTextInput messageTextInput = new MessageTextInput(inputTop);

            messageTextInput.MessageEntered += async(s, input) =>
            {
                if (input != "")
                {
                    try
                    {
                        MessengerCommand command = commandParser.Parse(input);
                        await command.AcceptHandlerAsync(commandHandler);
                    }
                    catch (MessengerCommandParserException ex)
                    {
                        messageLog.Add(new SystemMessage(ex.Message));
                    }
                    catch (Exception e)
                    {
                        messenger.Stop();
                        throw e;
                    }
                }
            };

            var components = new List <ConsoleUiComponent>
            {
                header, messageLogView, splitter, messageTextInput
            };

            Console.Clear();
            while (messenger.IsStarted)
            {
                foreach (var c in components)
                {
                    c.Render();
                }
                await Task.Delay(500);
            }
        }
 private void InsertMsgLog(string newsIdList, NewsInfoView firstNews)
 {
     try
     {
         if (!string.IsNullOrEmpty(newsIdList) && firstNews != null)
         {
             var msgLogView = new MessageLogView()
             {
                 NewsIdList     = newsIdList,
                 AppId          = firstNews.AppId,
                 MsgContentType = (int)Enum.Parse(typeof(WechatMessageLogType), firstNews.NewsCate),
             };
             this._MessageLogService.InsertView(msgLogView);
         }
     }
     catch (Exception ex)
     {
         _Logger.Error("an error occured when add send msg log :{0}", ex);
     }
 }