Example #1
0
        public MessengerCommandHandler(ITcpPeerMessenger messenger, MessageLog messageLog)
        {
            _messenger  = messenger;
            _messageLog = messageLog;

            _messenger.ClientAccepted += (s, endPoint) => { _lastConnectedEndPoint = endPoint; };
        }
Example #2
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);
            }
        }
Example #3
0
        public void Start(ITcpPeerMessenger messenger)
        {
            messenger.ClientAccepted += async(s, endPoint) =>
            {
                ChatbotDialog dialog = CreateDialog();
                dialog.DialogContext.Upsert <GetConnectedClients>(GetConnectedClients);

                _dialogs.Add(endPoint, dialog);
                foreach (string m in dialog.Handle())
                {
                    await messenger.SendMessageAsync(endPoint, m);
                }
            };

            messenger.MessageReceived += async(s, msg) =>
            {
                ChatbotDialog chatbot = _dialogs[msg.From];
                foreach (string m in chatbot.Handle(msg.Body))
                {
                    await messenger.SendMessageAsync(msg.From, m);
                }
            };
        }