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])); }