public async Task CreateQuickMatchWithAlliance()
        {
            var session = await Login();

            using (var client = new HttpClient {
                BaseAddress = new Uri(ServerUrl)
            })
            {
                client.AcceptJson().AddSessionHeader(session.Id);

                var quickMatch = new QuickMatch {
                    AlliancesOnly = true
                };

                var matchResponse = await client.PostAsJsonAsync("/api/matches", quickMatch);

                Assert.Equal(HttpStatusCode.Created, matchResponse.StatusCode);

                var matchGet = await matchResponse.Content.ReadAsStringAsync();

                var match = JsonConvert.DeserializeObject <Match>(matchGet, Actor.JsonSerializerSettings());
                Assert.Equal(session.Player.Id, match.Tournament.OwnerId);
                Assert.False(match.IsFinished);
                Assert.False(match.IsDeleted);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// A consolidated version of ConvertInput.
        /// </summary>
        /// <param name="config"></param>
        /// <returns></returns>
        static public string Parse(Generator.Export.Intrinsic.IDataConfig config)
        {
            // TableElement tableElementbackup = config.Table;
            string            tableOut = Parse(config.Databases, config.Table, config.Template);
            List <QuickMatch> list;

            while (0 != (list = TemplateReferenceUtil.GetReferences(tableOut)).Count)
            {
                // we could restore the table if it was changed
                QuickMatch match0 = list[0];

                if (!list[0].HasParams) /* error no parameters  */ continue {
                    ;
                }
                string newOut = string.Empty;
                // TableTemplate tbltmpl = null;

                if (!match0.HasMultipleParams)                   // single parameter-match

                {
                    bool checker = config.HasTemplate(list[0].Params[0]);
                    Debug.Assert(checker, string.Format("Template {0} not found! if you continue, the generated content will have errors.", match0.Params[0]));
                    if (checker)
                    {
                        config.Template = config.Templates[list[0].Params[0]];
                        newOut          = Parse(config);
                        tableOut        = tableOut.Replace(list[0].FullString, newOut);
                    }
                }
                else                     // Multiple param-matches

                {
                    for (int i = 1; i < match0.Params.Length; i++)
                    {
                        bool checker = config.HasTemplate(match0.Params[0]);
                        Debug.Assert(checker, string.Format("Template {0} not found! if you continue, the generated content will have errors.", match0.Params[0]));
                        if (checker)
                        {
                            config.Template = config.Templates[match0.Params[0]];
                            config.Table    = config.Database[match0.Params[i]];
                            newOut         += Parse(config);
                        }
                    }
                    tableOut = tableOut.Replace(list[0].FullString, newOut);
                }
            }
Ejemplo n.º 3
0
        static string WritePart(TemplateModel view, QuickMatch match, string generatedIn)
        {
            string generatedOut = generatedIn; //  QuickMatch match0 = list[0]; // Logger.LogY("TemplateFactory.WritePart","{0}", match.Value);// this is "TemplateName,TableName"

            if (!match.HasParams)
            {
                Logger.Warn("TemplateFactory.WritePart", "ERROR: No Params"); return(generatedIn);
            }

            if (!match.HasMultipleParams)
            {
                view.SetTemplate(match.Params[0]);
                if (view.TT == null)
                {
                    Logger.Warn("TemplateFactory.WritePart ERROR", "Tag: ‘{0}’ value.", match.Name); return(generatedIn);
                }
                generatedOut = generatedIn.Replace(match.FullString, Gen_Pass2(view)); // replace the template tag with the parsed content.
            }
            // the Directory Element is not parsed.
            else if (match.Name == "Directory")
            {
                if (System.IO.Directory.Exists(match.Value))
                {
                    var listf = new List <string>();
                    foreach (string dir in System.IO.Directory.GetDirectories(match.Value))
                    {
                        listf.Add(dir);
                    }
                    generatedOut = generatedIn.Replace(match.FullString, string.Join(",", listf.ToArray()));
                }
            }
            // ¡MAIN PARSER LOOP!
            else
            {
                string newOut = string.Empty;
                for (int i = 1; i < match.Params.Length; i++) // match.Params[i] = table-name; notice I starts at one
                {
                    view.SetTemplate(match.Params[0]);
                    view.SetView(match.Params[i]);
                    newOut += Gen_Pass2(view);
                }
                generatedOut = generatedIn.Replace(match.FullString, newOut);
            }
            return(generatedOut);
        }
        public async Task CreateQuickMatchWithAllianceForNonAlliedPlayer()
        {
            var ben = await Login("ben", "ben");

            using (var client = new HttpClient {
                BaseAddress = new Uri(ServerUrl)
            })
            {
                client.AcceptJson().AddSessionHeader(ben.Id);

                var quickMatch = new QuickMatch {
                    AlliancesOnly = true
                };

                var matchResponse = await client.PostAsJsonAsync("/api/matches", quickMatch);

                Assert.Equal(HttpStatusCode.NotFound, matchResponse.StatusCode);

                var response = await matchResponse.Content.ReadAsJsonAsync <ApiError>();

                Assert.Equal("No Players available for match at this moment.", response.Error);
            }
        }
Ejemplo n.º 5
0
        private async Task <QuickMatchResult> QuickMatch(QuickMatch quickMatch, IEnumerable <Group> groups)
        {
            Tournament    tournament;
            ContentResult error;

            if (quickMatch.Tournament.HasValue && quickMatch.Tournament != Guid.Empty)
            {
                tournament = await _context.Tournaments.FindAsync(quickMatch.Tournament);

                if (tournament == null)
                {
                    return(new QuickMatchResult
                    {
                        match = null,
                        error = HttpResponseHelper.BadRequest("Invalid Tournament.")
                    });
                }
            }
            else
            {
                tournament = new Tournament {
                    OwnerId = session.Player.Id
                };

                _context.Tournaments.Add(tournament);

                error = await SaveChangesAsync();

                if (error != null)
                {
                    return(new QuickMatchResult {
                        match = null, error = error
                    });
                }
            }

            // Create Match
            var match = new Match {
                TournamentId = tournament.Id, TotalRounds = quickMatch.Rounds
            };

            _context.Matches.Add(match);

            error = await SaveChangesAsync();

            if (error != null)
            {
                return(new QuickMatchResult {
                    match = match, error = error
                });
            }

            foreach (var actor in groups)
            {
                error = await MatchActor.Add(_context, match, actor);

                if (error != null)
                {
                    return(new QuickMatchResult {
                        match = match, error = error
                    });
                }
            }

            return(new QuickMatchResult {
                match = match, error = null
            });
        }
Ejemplo n.º 6
0
        public async Task <IActionResult> CreateQuickMatch([FromBody] QuickMatch quickMatch)
        {
            if (session?.Player == null)
            {
                return(HttpResponseHelper.NotFound("No Session/Player found."));
            }

            if (!ModelState.IsValid)
            {
                return(HttpResponseHelper.BadRequest(ModelState));
            }

            var result = new QuickMatchResult();

            // Build the filter by CustomData
            var customData = CustomDataBase.Parse(quickMatch.CustomData);

            if (quickMatch.Type == MatchType.Player)
            {
                var players =
                    await
                    Player.LoadRandom(
                        _context,
                        session.Player,
                        customData,
                        quickMatch.AlliancesOnly,
                        quickMatch.Actors - 1);

                players.Add(session.Player);

                if (players.Count < quickMatch.Actors)
                {
                    return(HttpResponseHelper.NotFound("No Players available for match at this moment."));
                }

                result = await QuickMatch(quickMatch, players);
            }
            else if (quickMatch.Type == MatchType.Group)
            {
                if (!quickMatch.ActorId.HasValue || quickMatch.ActorId == Guid.Empty)
                {
                    return(HttpResponseHelper.BadRequest("GroupId is required for Group Matches."));
                }

                var group = session.Player.Groups.FirstOrDefault(g => g.Id.Equals(quickMatch.ActorId));
                if (group == null)
                {
                    return(HttpResponseHelper.NotFound("No such Group found for Player."));
                }

                var groups =
                    await Group.LoadRandom(_context, group, customData, quickMatch.AlliancesOnly, quickMatch.Actors - 1);

                groups.Add(group);

                if (groups.Count < quickMatch.Actors)
                {
                    return(HttpResponseHelper.NotFound("No Groups available for match at this moment."));
                }

                result = await QuickMatch(quickMatch, groups);
            }

            if (result.error != null)
            {
                return(result.error);
            }

            return(CreatedAtRoute("GetMatchDetailed", new { id = result.match.Id }, result.match));
        }