Ejemplo n.º 1
0
        public void ArchiveMatch(int matchId)
        {
            var match = _context.Matches.Include(x => x.Participants).FirstOrDefault(x => x.MatchId == matchId);

            if (match == null)
            {
                return;
            }
            foreach (var party in match.Participants)
            {
                party.IsResolved  = true;
                party.ArchiveTime = DateTime.Now;
                party.Archived    = true;
                party.NetResult   = 0m;
            }

            match.ArchiveTime = DateTime.Now;
            match.Archived    = true;
            match.EndTime     = DateTime.Now;
            match.EntranceFee = 0m;
            match.IsResolved  = true;
            var userId = _httpContext.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier);
            var audit  = new MatchAudit
            {
                AuditDate = DateTime.Now,
                MatchId   = match.MatchId,
                UserId    = userId,
                Type      = AuditType.ArchiveMatch
            };

            _context.MatchAudits.Add(audit);
            _context.SaveChanges();
        }
Ejemplo n.º 2
0
        public void AddPlayers(int matchId, List <int> playerIds)
        {
            var match = _context.Matches.Find(matchId);

            foreach (var player in playerIds)
            {
                var pl = _context.Players.Find(player);
                if (pl == null)
                {
                    throw new PlayerNotFoundException();
                }
                var participant = new Participant
                {
                    Match    = match,
                    MatchId  = match.MatchId,
                    PlayerId = pl.PlayerId
                };
                _context.Participants.Add(participant);
            }
            var userId = _httpContext.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier);
            var audit  = new MatchAudit
            {
                AuditDate = DateTime.Now,
                MatchId   = match.MatchId,
                UserId    = userId,
                Type      = AuditType.AddParty
            };

            _context.MatchAudits.Add(audit);

            match.NumberOfPlayers += playerIds.Count;
            _context.SaveChanges();
        }
Ejemplo n.º 3
0
        public int AddNewMatch(MatchCreateModel createModel)
        {
            try
            {
                var trans = _context.Database.BeginTransaction();

                if (!createModel.GameId.HasValue)
                {
                    return(-1);
                }

                var newMatch = new Match
                {
                    GameId      = createModel.GameId.Value,
                    StartTime   = DateTime.Now,
                    EntranceFee = createModel.EntranceFee
                };
                _context.Matches.Add(newMatch);
                _context.SaveChanges();
                foreach (var party in createModel.StartingPlayers)
                {
                    var partObj = new Participant
                    {
                        IsResolved = false,
                        MatchId    = newMatch.MatchId,
                        PlayerId   = party
                    };
                    _context.Participants.Add(partObj);
                }

                newMatch.NumberOfPlayers = createModel.StartingPlayers.Length;
                _context.SaveChanges();

                var userId = _httpContext.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier);
                var audit  = new MatchAudit
                {
                    AuditDate = DateTime.Now,
                    MatchId   = newMatch.MatchId,
                    UserId    = userId,
                    Type      = AuditType.CreateMatch
                };
                _context.MatchAudits.Add(audit);
                _context.SaveChanges();
                trans.Commit();
                trans.Dispose();
                return(newMatch.MatchId);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                Log.Error(e, "Error occured while saving a new match");
                return(-1);
            }
        }
Ejemplo n.º 4
0
        public int StartCashGame(CashGameCreateModel model)
        {
            try
            {
                if (model == null)
                {
                    return(-1);
                }
                var trans = _context.Database.BeginTransaction();
                var game  = new CashGame
                {
                    GameName    = "Cash Poker",
                    Stakes      = model.Stakes,
                    TimeStarted = DateTime.Now
                };
                _context.CashGames.Add(game);
                _context.SaveChanges();
                foreach (var player in model.StartingPlayers)
                {
                    var party = new CashGameParty
                    {
                        AmountStaked     = 0m,
                        PlayerId         = player,
                        GameId           = game.CashGameId,
                        IsPlayerFinished = false
                    };
                    _context.CashGameParties.Add(party);
                }

                if (_httpContext.HttpContext != null)
                {
                    var userId = _httpContext.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier);
                    var audit  = new MatchAudit
                    {
                        AuditDate = DateTime.Now,
                        MatchId   = game.CashGameId,
                        UserId    = userId,
                        Type      = AuditType.CreateMatch
                    };
                    _context.MatchAudits.Add(audit);
                }

                _context.SaveChanges();
                trans.Commit();
                return(game.CashGameId);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                Log.Error(e, "Error occured while saving a new match");
                return(-1);
            }
        }
Ejemplo n.º 5
0
        public void ResolveSingleWinnerMatch(int matchId, int winningParticipantId)
        {
            var trans = _context.Database.BeginTransaction();
            var match = _context.Matches.Include(x => x.Participants).Include(x => x.Game).FirstOrDefault(x => x.MatchId == matchId);

            if (match == null || match.Game.NumberOfWinners != NumberOfWinners.SingleWinner)
            {
                throw new MatchNotFoundException();
            }
            var winner        = match.Participants.FirstOrDefault(x => x.ParticipantId == winningParticipantId);
            var totalWinnings = match.EntranceFee * match.Participants.Count(x => !x.Archived);

            winner.NetResult  = totalWinnings - match.EntranceFee;
            winner.IsResolved = true;
            winner.IsWinner   = true;
            foreach (var party in match.Participants.Where(x => x.ParticipantId != winner.ParticipantId && !x.IsResolved && !x.Archived))
            {
                party.NetResult  = -match.EntranceFee;
                party.IsResolved = true;
                party.IsWinner   = false;
            }

            match.IsResolved = true;
            match.EndTime    = DateTime.Now;

            var userId = _httpContext.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier);
            var audit  = new MatchAudit
            {
                AuditDate = DateTime.Now,
                MatchId   = match.MatchId,
                UserId    = userId,
                Type      = AuditType.CompleteMatch
            };

            _context.MatchAudits.Add(audit);
            _context.SaveChanges();
            if (_context.Players.Include(x => x.MatchesParticipatedIn).ThenInclude(x => x.Match).ToList().Sum(x => x.CurrentPosition) != 0)
            {
                Log.Error("Board does not level out");
                throw new Exception("Board does not level");
            }
            trans.Commit();
            trans.Dispose();
        }
Ejemplo n.º 6
0
        public void ArchivePlayer(int partyId)
        {
            var result = _context.Participants.Include(x => x.Match).FirstOrDefault(x => x.ParticipantId == partyId);

            if (result != null)
            {
                result.IsResolved  = true;
                result.ArchiveTime = DateTime.Now;
                result.Archived    = true;
                result.NetResult   = 0m;
                result.Match.NumberOfPlayers--;
                var userId = _httpContext.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier);
                var audit  = new MatchAudit
                {
                    AuditDate = DateTime.Now,
                    MatchId   = result.MatchId,
                    UserId    = userId,
                    Type      = AuditType.RemoveParty
                };
                _context.MatchAudits.Add(audit);
                _context.SaveChanges();
            }
        }
Ejemplo n.º 7
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="matchId"></param>
        /// <param name="playerResults">Dictionary containing each partyid and their net result</param>
        public void ResolveMultiWinnerMatch(int matchId, Dictionary <int, decimal> playerResults)
        {
            var trans = _context.Database.BeginTransaction();
            var valid = playerResults.Sum(x => x.Value) == 0;

            if (!valid)
            {
                throw new NotImplementedException();
            }
            var match = _context.Matches.Include(x => x.Participants).Include(x => x.Game).First(x => x.MatchId == matchId);

            foreach (var result in playerResults)
            {
                var party = match.Participants.First(x => x.ParticipantId == result.Key);
                party.IsWinner   = result.Value >= 0;
                party.NetResult  = result.Value;
                party.IsResolved = true;
                _context.SaveChanges();
            }

            match.IsResolved  = true;
            match.EntranceFee = 0;
            match.EndTime     = DateTime.Now;

            var userId = _httpContext.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier);
            var audit  = new MatchAudit
            {
                AuditDate = DateTime.Now,
                MatchId   = match.MatchId,
                UserId    = userId,
                Type      = AuditType.ArchiveMatch
            };

            _context.MatchAudits.Add(audit);
            _context.SaveChanges();
            trans.Commit();
        }
Ejemplo n.º 8
0
        public void MarkAsDraw(int matchId)
        {
            var trans = _context.Database.BeginTransaction();
            var match = _context.Matches.Include(x => x.Participants).Include(x => x.Game).FirstOrDefault(x => x.MatchId == matchId);

            if (match == null)
            {
                return;
            }
            match.IsResolved = true;
            match.EndTime    = DateTime.Now;
            _context.SaveChanges();
            foreach (var party in match.Participants)
            {
                party.IsResolved = true;
                party.NetResult  = 0m;
                party.IsWinner   = true;
            }

            _context.SaveChanges();
            var userId = _httpContext.HttpContext?.User.FindFirstValue(ClaimTypes.NameIdentifier);
            var audit  = new MatchAudit
            {
                AuditDate = DateTime.Now,
                MatchId   = match.MatchId,
                UserId    = userId,
                Type      = AuditType.DrawMatch
            };

            if (_context.Players.Include(x => x.MatchesParticipatedIn).ThenInclude(x => x.Match).ToList().Sum(x => x.CurrentPosition) != 0)
            {
                Log.Error("Board does not level out");
                throw new Exception("Board does not level");
            }
            trans.Commit();
        }