/// <summary> /// Processes a client disconnecting from the server- removes the client as an observer, removes their connection and deletes their CryptoServiceProvider /// </summary> /// <param name="conn">Connection of the client who disconnected</param> private void Disconnect(NetConnection conn) { Contract.Requires(conn != null); lock (ServerLock) { if (clientConnections.ContainsKey(conn)) { Client client = clientConnections[conn]; Globals_Server.logEvent("Client " + client.username + " disconnects"); Globals_Game.RemoveObserver(client); client.conn = null; clientConnections.Remove(conn); client.alg = null; conn.Disconnect("Disconnect"); } } }