Esempio n. 1
0
        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);
                }
            }
        }