コード例 #1
0
        public async Task <ActionResult> AddTeam([FromBody] string teamName)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            if (string.IsNullOrWhiteSpace(teamName))
            {
                return(BadRequest("Could not get teamname or teamname is empty"));
            }

            using (new RWLockHelper(Program.RWLockTeams, RWLockHelper.LockMode.Write))
            {
                if (Program.Teams.Exists(t => t.Name.Equals(teamName, StringComparison.CurrentCultureIgnoreCase)))
                {
                    return(Conflict("A team with this name already exists"));
                }

                var team = new Team {
                    CurrentPoints = 0, Name = teamName, ID = Program.Teams.Max(t => t.ID, 0) + 1
                };
                Program.Teams.Add(team);

                var notifyTask = LevelScoreHub.UpdateAllClientsNewTeam(_hubCtx, team);
                Program.DataLogger.TeamsChanged();
                await notifyTask;
            }

            return(Ok());
        }
コード例 #2
0
        public async Task <ActionResult> UpdateTitle([FromBody] string title)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            if (string.IsNullOrWhiteSpace(title))
            {
                return(BadRequest("Title cannot be empty"));
            }
            Program.GameTitle = title;
            await LevelScoreHub.SetNewTitle(_hubCtx);

            return(Ok());
        }
コード例 #3
0
        public async Task <ActionResult> SetLevel([FromBody] string levels)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            if (string.IsNullOrWhiteSpace(levels))
            {
                return(BadRequest("Could either not read level or required points is less than 1"));
            }
            var nums = new List <int>();

            foreach (var p in levels.Split(','))
            {
                if (int.TryParse(p, out var i))
                {
                    nums.Add(i);
                }
                else
                {
                    return(BadRequest("Malformed data. Provide comma seperated int-values"));
                }
            }

            using (new RWLockHelper(Program.RWLockLevels, RWLockHelper.LockMode.Write))
            {
                Program.Levels.Clear();
                var l = 1;
                Program.Levels.AddRange(nums.Select(n => new Level {
                    LevelID = l++, PointsRequired = n
                }));

                var notifyTask = LevelScoreHub.UpdateAllClientsFull(_hubCtx);
                Program.DataLogger.LevelsChanged();
                await notifyTask;
            }

            return(Ok());
        }
コード例 #4
0
        public async Task <ActionResult> RemoveTeam(int id)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            using (new RWLockHelper(Program.RWLockTeams, RWLockHelper.LockMode.Write))
            {
                var team = Program.Teams.FirstOrDefault(t => t.ID == id);
                if (team == null)
                {
                    return(NotFound());
                }
                Program.Teams.Remove(team);
                team.CurrentPoints = 0;

                var notifyTask = LevelScoreHub.UpdateAllClientsRemoveTeam(_hubCtx, team);
                Program.DataLogger.TeamsChanged();
                await notifyTask;
            }
            return(Ok());
        }
コード例 #5
0
        public async Task <ActionResult> AddPoints(int teamId, [FromBody] int points)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (points == 0)
            {
                return(BadRequest("Enter a positive number to add points or a negative number to remove points"));
            }

            if (points < 0 && !User.HasClaim(c => c.Type == PasswordBasedLoginProvider.IS_ADMIN_CLAIM_TYPE && c.Value == "yes"))
            {
                return(Forbid());
            }

            using (new RWLockHelper(Program.RWLockTeams, RWLockHelper.LockMode.Write))
            {
                var team = Program.Teams.FirstOrDefault(t => t.ID == teamId);
                if (team == null)
                {
                    return(NotFound());
                }
                var newPoints = team.CurrentPoints + points;
                if (newPoints < 0)
                {
                    return(BadRequest("cannot remove points; the teams total points would be negative"));
                }
                team.CurrentPoints = newPoints;

                var notifyTask = LevelScoreHub.UpdateAllClientsTeamChanged(_hubCtx, team);
                Program.DataLogger.TeamsChanged();
                await notifyTask;
            }
            return(Ok());
        }