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
            });
        }
Example #3
0
        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"
            });
        }
Example #4
0
        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);
                }
            }
        }