public ConcurrentDictionary <string, AdvertiseQueryServer> ReadAdvertServers()
        {
            var serversCollection = new ConcurrentDictionary <string, AdvertiseQueryServer>();

            using (var connection = new SQLiteConnection($"{baseName}"))
            {
                var advertServers  = connection.Table <AdvertiseQueryServer>();
                var gameModes      = connection.Table <GameMode>();
                var modeDictionary = new Dictionary <string, List <string> >();
                foreach (var gameMode in gameModes)
                {
                    if (!modeDictionary.ContainsKey(gameMode.Endpoint))
                    {
                        modeDictionary.Add(gameMode.Endpoint, new List <string>());
                    }
                    modeDictionary[gameMode.Endpoint].Add(gameMode.Mode);
                }
                foreach (var advertServer in advertServers)
                {
                    var newServer = new AdvertiseQueryServer
                    {
                        Endpoint = advertServer.Endpoint,
                        Name     = advertServer.Name,
                        Info     = new Information
                        {
                            Name      = advertServer.Name,
                            GameModes = modeDictionary[advertServer.Endpoint].ToArray()
                        }
                    };
                    serversCollection.AddOrUpdate(advertServer.Endpoint, newServer, (s, server) => newServer);
                }
            }
            return(serversCollection);
        }
 public void UpdateAdvertServer(AdvertiseQueryServer advertiseQueryServer)
 {
     using (var connection = new SQLiteConnection($"{baseName}"))
     {
         connection.CreateCommand(
             $"DELETE FROM AdvertiseQueryServer WHERE endpoint = {advertiseQueryServer.Endpoint}; " +
             $"DELETE FROM GameModes WHERE endpoint = {advertiseQueryServer.Endpoint}");
         connection.Commit();
         AddAdvertServer(advertiseQueryServer);
     }
 }
 public void AddAdvertServer(AdvertiseQueryServer advertiseQueryServer)
 {
     using (var connection = new SQLiteConnection($"{baseName}"))
     {
         connection.Insert(advertiseQueryServer);
         foreach (var gameMode in advertiseQueryServer.Info.GameModes)
         {
             connection.Insert(new GameMode
             {
                 Endpoint = advertiseQueryServer.Endpoint,
                 Mode     = gameMode
             });
         }
     }
 }
        private RequestHandlingResult PutInfo(string endpoint, string body)
        {
            Information info;

            if (!jsonSerializer.TryDeserialize(body, out info) || !CheckInfoField(body))
            {
                return(RequestHandlingResult.Fail(HttpStatusCode.BadRequest));
            }
            var advertRequest = new AdvertiseQueryServer(endpoint, info);

            if (AdvertiseServers.ContainsKey(endpoint))
            {
                dataBase.UpdateAdvertServer(advertRequest);
            }
            else
            {
                dataBase.AddAdvertServer(advertRequest);
            }
            AdvertiseServers.AddOrUpdate(endpoint, advertRequest, ((s, server) => advertRequest));
            return(RequestHandlingResult.Successfull(new byte[0]));
        }