Exemple #1
0
        private void ProcessClient(NetworkClient networkClient)
        {
            if (networkClient.IsOnline)
            {
                return;
            }

            var clientOnServer =
                ClientsOnServer.FirstOrDefault(
                    x => x.TcpClient.Client.RemoteEndPoint.Equals(networkClient.Adress));

            RemoveClient(clientOnServer);
        }
Exemple #2
0
        private void ClientThread(Object stateInfo)
        {
            try
            {
                var client = (TcpClient)stateInfo;

                //получение имени клиента
                var newClientName = (string)client.GetDataFromStream();

                var clientOnServer = new ClientOnServer(newClientName, client)
                {
                    ConnectionTimer = { Interval = _timeSpan.TotalMilliseconds }  //интервал через который будет производиться проверка активности
                };

                clientOnServer.ConnectionTimer.Elapsed += delegate { DisconnectInactiveClient(clientOnServer); };

                Application.Current.Dispatcher.Invoke(delegate
                {
                    ClientsOnServer.Add(new ClientOnServer(newClientName, client));
                });

                //передаем новому клиенту список клиентов сети
                var networkClients = new ObservableCollection <NetworkClient>();

                foreach (var c in ClientsOnServer.Where(c => c.TcpClient != client))
                {
                    networkClients.Add(new NetworkClient(c.Name, c.TcpClient.Client.RemoteEndPoint));
                }

                client.PutDataToStream(new NetworkClientsCollection(networkClients));

                //передаем остальным клиентам сети данные нового клиента
                foreach (var c in ClientsOnServer)
                {
                    if (c.TcpClient.Client.RemoteEndPoint == client.Client.RemoteEndPoint)
                    {
                        continue;
                    }

                    var newClient = new NetworkClient(newClientName, client.Client.RemoteEndPoint);

                    c.TcpClient.PutDataToStream(newClient);
                }

                ReceiveMessage(client);
            }
            catch (Exception e)
            {
                ServerEvents.Add(new ServerEvent(ServerEventEnum.Error, DateTime.Now, e.ToString()));
            }
        }
Exemple #3
0
        private void ProcessTextMessage(NetworkMessage message, TcpClient client)
        {
            var clientOnServer =
                ClientsOnServer.FirstOrDefault(
                    x => Equals(x.TcpClient.Client.RemoteEndPoint, message.FromPoint));

            if (clientOnServer != null)
            {
                clientOnServer.LastActivityTime = DateTime.Now;

                SaveMessageToLogFile(message, clientOnServer.Name);
            }

            var isDelivered = SendMessage(message);

            //отправка информации о состоянии сообщения
            client.PutDataToStream(new NetworkMessageState(isDelivered));
        }
Exemple #4
0
        private bool SendMessage(NetworkMessage message)
        {
            try
            {
                var netClient =
                    ClientsOnServer.FirstOrDefault(x => Equals(x.TcpClient.Client.RemoteEndPoint, message.ToPoint));

                if (netClient != null)
                {
                    netClient.TcpClient.PutDataToStream(message);
                    return(true);
                }

                return(false);
            }
            catch (Exception)
            {
                return(false);
            }
        }
Exemple #5
0
        private void RemoveClient(ClientOnServer clientOnServer)
        {
            try
            {
                var networkClient = new NetworkClient(clientOnServer.Name,
                                                      clientOnServer.TcpClient.Client.RemoteEndPoint, false);

                Application.Current.Dispatcher.Invoke(delegate
                {
                    ClientsOnServer.Remove(clientOnServer);
                });

                foreach (var c in ClientsOnServer)
                {
                    c.TcpClient.PutDataToStream(networkClient);
                }
            }
            catch (Exception e)
            {
                ServerEvents.Add(new ServerEvent(ServerEventEnum.Error, DateTime.Now, e.ToString()));
            }
        }