protected override void Dispose(bool disposing) { if (!IsDisposed) { if (disposing) { for (var i = PlayersJoining.Count - 1; i >= 0; i--) { PlayersJoining[i].Dispose(); } PlayersJoining.Clear(); for (var i = Clients.Count - 1; i >= 0; i--) { Clients[i].SendKick("Closing server!"); Clients[i].Dispose(); } Clients.Clear(); for (var i = PlayersToAdd.Count - 1; i >= 0; i--) { PlayersToAdd[i].SendKick("Closing server!"); PlayersToAdd[i].Dispose(); } PlayersToAdd.Clear(); // Do not dispose PlayersToRemove! PlayersToRemove.Clear(); } IsDisposed = true; } base.Dispose(disposing); }