public MessengerCommandHandler(ITcpPeerMessenger messenger, MessageLog messageLog) { _messenger = messenger; _messageLog = messageLog; _messenger.ClientAccepted += (s, endPoint) => { _lastConnectedEndPoint = endPoint; }; }
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); } }
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); } }; }