private void GenerateServerList() { lock (ServerList) { var toRemove = new List <ServerInfo>(); lock (GameServers) { foreach (var sInfo in ServerList) { CommunicatorClient client; if (GameServers.TryGetValue(sInfo.ServerId, out client)) { sInfo.Setup(client.PublicAddress, client.QueuePort, client.GamePort, client.AgeLimit, client.PKFlag, client.CurrentPlayers, client.MaxPlayers); continue; } if (Config.AuthListType == AuthListType.Online) { toRemove.Add(sInfo); continue; } sInfo.Clear(); } foreach (var server in GameServers) { if (ServerList.All(s => s.ServerId != server.Key)) { ServerList.Add(new ServerInfo { AgeLimit = server.Value.AgeLimit, PKFlag = server.Value.PKFlag, CurrentPlayers = server.Value.CurrentPlayers, MaxPlayers = server.Value.MaxPlayers, QueuePort = server.Value.QueuePort, GamePort = server.Value.GamePort, Ip = server.Value.PublicAddress, ServerId = server.Key, Status = 1 }); } } } if (toRemove.Count == 0) { return; } foreach (var rem in toRemove) { ServerList.Remove(rem); } } }