public static ScoreBoardDto ToScoreBoardDto(
            this IMapper mapper,
            ScoreBoardModel scoreBoardModel)
        {
            var scoreBoardDto = mapper.Map <
                ScoreBoardModel,
                ScoreBoardDto
                >(scoreBoardModel);

            return(scoreBoardDto);
        }
Beispiel #2
0
        public void SetScoreboard(ScoreBoardModel sb)
        {
            int n         = sb.rows.FirstOrDefault()?.problems?.Length ?? 0;
            var solvedtot = 0;
            var solved    = new int[n];
            var inc       = new int[n];
            var pend      = new int[n];
            var fb        = new int[n];

            for (int i = 0; i < n; i++)
            {
                fb[i] = int.MaxValue;
            }

            foreach (var row in sb.rows)
            {
                for (int i = 0; i < n; i++)
                {
                    var prob = row.problems[i];

                    if (prob.solved)
                    {
                        solvedtot++;
                        solved[i]++;
                        inc[i]--;
                        fb[i] = Math.Min(fb[i], prob.time);
                    }

                    inc[i]  += prob.num_judged;
                    pend[i] += prob.num_pending;
                }
            }

            ScoreBoard  = sb;
            SolvedTotal = solvedtot;
            Solved      = solved;
            Incorrect   = inc;
            Pending     = pend;
            FirstSolve  = fb;
            LastUpdate  = DateTime.Now;
        }
Beispiel #3
0
        public async Task StartAsync()
        {
            ScoreBoardModel sb = null;
            ContestModel    ct = null;

            if (File.Exists(_name + ".scoreboard.json"))
            {
                var content = await File.ReadAllTextAsync(_name + ".scoreboard.json");

                sb = Parse <ScoreBoardModel>(content);
                Logger.LogInformation(_name + ".scoreboard.json cache loaded from disk.");
            }

            if (File.Exists(_name + ".organizations.json"))
            {
                var content = await File.ReadAllTextAsync(_name + ".organizations.json");

                SetOrganizations(Parse <List <AffiliationModel> >(content) ?? new List <AffiliationModel>());
                Logger.LogInformation(_name + ".organizations.json cache loaded from disk.");
            }

            if (File.Exists(_name + ".teams.json"))
            {
                var content = await File.ReadAllTextAsync(_name + ".teams.json");

                SetTeams(Parse <List <TeamModel> >(content) ?? new List <TeamModel>());
                Logger.LogInformation(_name + ".teams.json cache loaded from disk.");
            }

            if (File.Exists(_name + ".problems.json"))
            {
                var content = await File.ReadAllTextAsync(_name + ".problems.json");

                Problems = Parse <List <ProblemModel> >(content);
                Logger.LogInformation(_name + ".problems.json cache loaded from disk.");
            }

            if (File.Exists(_name + ".groups.json"))
            {
                var content = await File.ReadAllTextAsync(_name + ".groups.json");

                SetGroups(Parse <List <Group> >(content));
                Logger.LogInformation(_name + ".groups.json cache loaded from disk.");
            }

            if (File.Exists(_name + ".contest.json"))
            {
                var content = await File.ReadAllTextAsync(_name + ".contest.json");

                ct = Parse <ContestModel>(content);
                Logger.LogInformation(_name + ".contest.json cache loaded from disk.");
            }

            sb ??= new ScoreBoardModel
            {
                contest_time = "",
                event_id     = "",
                rows         = new List <Row>(),
                state        = new State(),
                time         = DateTime.UnixEpoch
            };

            SetScoreboard(sb);

            Problems ??= new List <ProblemModel>();

            ct ??= new ContestModel
            {
                formal_name  = "Demo contest",
                penalty_time = 20,
                start_time   = DateTime.Now.AddDays(-1),
                end_time     = DateTime.Now.AddDays(1),
                duration     = "48:00:00.000",
                scoreboard_freeze_duration = "1:00:00.000",
                id          = "2",
                external_id = "demo",
                name        = "Demo contest",
                shortname   = "demo",
            };

            SetContest(ct);
        }
Beispiel #4
0
 public IActionResult Scoreboard([FromBody] ScoreBoardModel model)
 {
     DataService.Instance.SetScoreboard(model);
     return(Ok());
 }
Beispiel #5
0
 public IActionResult Scoreboard([FromBody] ScoreBoardModel model)
 {
     HttpContext.Holder().SetScoreboard(model);
     return(Ok());
 }