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