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