コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: Client.cs プロジェクト: AndreiLucaci/MeseMe
        public async Task ShutDownAsync()
        {
            _listening = false;

            DeregisterEvents();

            var messageProtocol = new MessageProtocol
            {
                Header = MessageType.ClientDisconnected,
                Data   = Me.User
            };

            await MessageCommunicator.WriteAsync(_tcpClient, messageProtocol);

            _tcpClient.Close();
        }
コード例 #3
0
        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);
        }
コード例 #4
0
ファイル: Client.cs プロジェクト: AndreiLucaci/MeseMe
        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);
        }
コード例 #5
0
ファイル: Client.cs プロジェクト: AndreiLucaci/MeseMe
        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();
        }