public IActionResult AddPlayer([FromBody] AddPlayerInput data) { if (ModelState.IsValid) { var res = _game.AddPlayer(data); return(Ok(res)); } return(BadRequest(ModelState)); }
public async Task <BaseDto> AddPlayer([FromBody] AddPlayerInput input) { var guid = Guid.NewGuid().ToString("N"); await _context.users.AddAsync(new GameUser() { Avatar = input.AvatarUrl, IdentityId = guid, RegisterGameId = input.GameId }); return(new BaseDto() { data = guid }); }
public AddPlayerOutput AddPlayer(AddPlayerInput data) { var wasQueued = false; try { //Add playerTask to threadpool queue wasQueued = ThreadPool.QueueUserWorkItem((o) => AddPlayerTask(data)); } catch (Exception ex) { Debug.WriteLine(ex); } return(new AddPlayerOutput() { PlayerID = data.PlayerID, Message = wasQueued ? "Success" : "Failure" }); }
private void AddPlayerTask(AddPlayerInput data) { //Assuming player can re-play with the same id //Only last game score will persist in memory Debug.WriteLine("AddPlayerTask with ID: " + data.PlayerID); var player = new Player { PlayerID = data.PlayerID, PlayerName = data.PlayerName, CurrentPosition = 1, Status = PlayerStatus.Playing }; while (player.Status.Equals(PlayerStatus.Playing)) { _level.MovePlayer(player, _dice.Roll()); lock (players) { players.AddOrUpdate(player.PlayerID, player, (oldVal, newVal) => player); } } //game play ended if (HasHighestScore(player.PlayerID)) { var leadPlayers = players.Values.Where( v => v.HighestScore.Equals(true) && v.CurrentScore > player.CurrentScore).ToList(); lock (players) { //set HighestScore = false on the previous lead players foreach (var lp in leadPlayers) { lp.HighestScore = false; players.AddOrUpdate(lp.PlayerID, lp, (oldVal, newVal) => lp); } //set HighestScore = true on current lead player player.HighestScore = true; players.AddOrUpdate(player.PlayerID, player, (oldVal, newVal) => player); } } }