public async Task ProcessAsync(IMessageProtocol messageProtocol) { if (Equals(messageProtocol.Header, MessageType.Message)) { var message = messageProtocol.GetDataAs <Message>(); try { var meseClient = _clientsPool.FindClient(message.To.Id); if (meseClient != null) { await MessageCommunicator.WriteAsync(meseClient.TcpClient, messageProtocol); } else { Logger.Error($"Client {message.To.Name} not found. "); } } catch (Exception ex) { Logger.Error($"Exception: {ex}."); } return; } await _innerProcessor.ProcessAsync(messageProtocol); }
public async Task ShutDownAsync() { _listening = false; DeregisterEvents(); var messageProtocol = new MessageProtocol { Header = MessageType.ClientDisconnected, Data = Me.User }; await MessageCommunicator.WriteAsync(_tcpClient, messageProtocol); _tcpClient.Close(); }
private async Task SendConnectionConfirmationAsync(IClient meseClient, IEnumerable <IClient> others) { var connectionEstablished = new ConnectionEstablished { Me = meseClient.User, Others = others.Select(i => i.User).ToArray() }; var messageProtocol = new MessageProtocol { Header = MessageType.ClientConnectedSelf, Data = connectionEstablished }; await MessageCommunicator.WriteAsync(meseClient.TcpClient, messageProtocol); }
public async Task SendMessageAsync(string text, User to) { if (string.IsNullOrEmpty(text) || to == null) { return; } var message = new Message { To = to, From = Me.User, Text = text }; var messageProtocol = new MessageProtocol { Header = MessageType.Message, Data = message }; await MessageCommunicator.WriteAsync(_tcpClient, messageProtocol); }
public async Task ConnectAsync(string name, ISettings settings) { if (string.IsNullOrEmpty(name)) { return; } var host = ResolveHostname(settings); await ConnectAsyncWithTimeout(_tcpClient, host, settings.Port); var messageProtocol = new MessageProtocol { Header = MessageType.ClientConnection, Data = name }; await MessageCommunicator.WriteAsync(_tcpClient, messageProtocol); _listening = true; Listen(); }