private RequestHandlingResult PutMatches(string endpoint, string body, string date) { GameServer gameServer; if (!AdvertiseServers.ContainsKey(endpoint) || !CheckMatchField(body) || !jsonSerializer.TryDeserialize(body, out gameServer) || !CheckGameMode(endpoint, gameServer.GameMode)) { return(RequestHandlingResult.Fail(HttpStatusCode.BadRequest)); } gameServer.Endpoint = endpoint; gameServer.DateAndTime = DateTime.Parse(date, null, DateTimeStyles.RoundtripKind); GameServers.Add(gameServer); dataBase.AddGameServer(gameServer); return(RequestHandlingResult.Successfull(new byte[0])); }
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])); }
private RequestHandlingResult GetServerInformation(string request) { var splitedRequest = ServerInfoRegex.Split(request); if (splitedRequest[1] == "info") { var serializeServers = jsonSerializer.Serialize(AdvertiseServers.Values.ToArray()); return(RequestHandlingResult.Successfull(serializeServers.GetBytesInAscii())); } var endpoint = splitedRequest[1]; var neededGames = GameServers.Where(x => x.Endpoint == endpoint).ToArray(); var neededAdvertServer = AdvertiseServers.Where(x => x.Key == endpoint).ToArray(); if (!neededAdvertServer.Any() && neededGames.Length == 0) { return(RequestHandlingResult.Fail(HttpStatusCode.NotFound)); } object informations; switch (splitedRequest[2]) { case "info": informations = neededAdvertServer[0].Value.Info; break; case "matches": return(GetAdvertMatch(splitedRequest[3], neededGames)); case "stats": informations = statistic.GetServerStatistic(neededGames); break; default: return(RequestHandlingResult.Fail(HttpStatusCode.BadRequest)); } var serializeInformation = jsonSerializer.Serialize(informations); return(RequestHandlingResult.Successfull(serializeInformation.GetBytesInAscii())); }
private bool CheckGameMode(string endpoint, string gameMode) { return(AdvertiseServers.Where(x => x.Key == endpoint) .Select(x => x.Value.Info.GameModes).Any(x => x.Contains(gameMode))); }