public int CleanUp() { int removedPlayers = 0; try { foreach (var player in _roomPlayers.ToArray()) { if (_roomPlayers.TryRemove(player.Key, out _)) { player.Value.Peer.Disconnect(ServerDisconnectReason.RoomCleanup); ++removedPlayers; } } _packetSender.Stop(); _roomController.Dispose(); _taskScheduler.RemoveAll(); _roomPlayers.Clear(); //close room on matchmaker Close(); } catch (Exception e) { _logger?.Error($"Error disposing room: {e}"); } finally { _logger?.Error($"RoomStats: {_roomStats}"); } return(removedPlayers); }