protected virtual void FireTooManyClientsEvent(Client client) { if (OnTooManyClients != null) OnTooManyClients(this, new ClientEventArgs { Client = client }); }
protected virtual void FireMessageReceivedEvent(Client client) { if (OnMessageReceived != null) OnMessageReceived(this, new ClientEventArgs { Client = client }); }
private void ClientAccepted(IAsyncResult iar) { try { if (_server == null || !_server.Server.IsBound) return; StartAcceptingClients(); var listener = iar.AsyncState as TcpListener; if (listener == null) return; TcpClient tcpClient = listener.EndAcceptTcpClient(iar); var client = new Client {TcpClient = tcpClient}; if (_maxNumOfClients >= 0 && _clients.Count >= _maxNumOfClients) { FireTooManyClientsEvent(client); client.TcpClient.Close(); return; } _clients.Add(client); FireClientConnectedEvent(client); client.TcpClient.GetStream().BeginRead(new byte[0], 0, 0, ClientRead, client); } catch (Exception e) { Stop(); } }
protected virtual void FireClientDisconnectedEvent(Client client) { if (OnClientDisconnect != null) OnClientDisconnect(this, new ClientEventArgs { Client = client }); }
/// <summary> /// Cleanly closes a client connection /// </summary> /// <param name="client">The client whose connection should be closed</param> public void CloseConnection(Client client) { if (client == null) return; client.TcpClient.Close(); _clients.Remove(client); FireClientDisconnectedEvent(client); }