private void ProcessClient(NetworkClient networkClient) { if (networkClient.IsOnline) { return; } var clientOnServer = ClientsOnServer.FirstOrDefault( x => x.TcpClient.Client.RemoteEndPoint.Equals(networkClient.Adress)); RemoveClient(clientOnServer); }
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())); } }
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)); }
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); } }
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())); } }