Ejemplo n.º 1
0
        public ActionResult CalcResults()
        {
            var wagers = _context.Wagers
                         .Include(w => w.Game)
                         .Where(w => w.Game.Active)
                         .OrderBy(w => w.ApplicationUserId)
                         .ToArray();
            var  currentUser   = _context.Users.OrderBy(u => u.Id).ToList().First();
            long applyToWallet = 0L;

            foreach (var item in wagers)
            {
                if (item.ApplicationUserId != currentUser.Id)
                {
                    // Update the wallet
                    currentUser.Wallet += applyToWallet;
                    // Reset the variables
                    applyToWallet = 0;
                    currentUser   = _context.Users.Where(u => u.Id == item.ApplicationUserId).SingleOrDefault();
                }
                // Calculate how much to apply based on how much the Wager awards
                applyToWallet += Wager.Award(item);
            }
            currentUser.Wallet += applyToWallet;
            _context.SaveChanges();
            return(RedirectToAction("Index", "User"));
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> CancelWager(int id)
        {
            string?userId   = User.GetId();
            string?userName = User.GetName();
            Wager  wager    = await _context.Wagers.Where(x => x.Id == id).Include(x => x.Hosts).FirstOrDefaultAsync();

            if (wager == null)
            {
                ModelState.AddModelError(string.Empty, _errorMessages.NotFound);
                return(BadRequest(ModelState));
            }
            if (wager.Status != (byte)Status.Created)
            {
                ModelState.AddModelError(string.Empty, "Wager is not in the created.");
                return(BadRequest(ModelState));
            }
            if (!wager.Hosts.Any(x => x.ProfileId == userId))
            {
                ModelState.AddModelError(string.Empty, "You are not a host of this wager.");
                return(BadRequest(ModelState));
            }
            wager.Status = (byte)Status.Canceled;
            PersonalNotification notification = new PersonalNotification
            {
                Date      = DateTime.Now,
                Message   = $"{userName} has canceled the wager.",
                Data      = wager.Id.ToString(),
                DataModel = (byte)DataModel.Wager
            };
            List <PersonalNotification> notifications = NotificationHandler.AddNotificationToUsers(_context, wager.HostIds(), notification);
            await SignalRHandler.SendNotificationsAsync(_context, _hubContext, wager.HostIds(), notifications);

            return(Ok());
        }
Ejemplo n.º 3
0
        public override void Draw()
        {
            if (HasWager)
            {
                Console.Write($"{Wager.ToString("c")}\t");
            }

            if (HasCards)
            {
                foreach (Card card in Cards)
                {
                    card.Draw();
                    Console.Write(" ");
                }

                if (HasBeenDealt)
                {
                    if (IsBlackjack)
                    {
                        Console.Write("BLACKJACK!");
                    }
                    else if (HasSoftValue)
                    {
                        Console.Write($"({SoftLowValue} or {SoftHighValue})\t{Status}");
                    }
                    else
                    {
                        Console.Write($"({FinalValue})\t{Status}");
                    }
                }
            }
        }
Ejemplo n.º 4
0
        public ActionResult Save(Wager wager)
        {
            if (!ModelState.IsValid)
            {
                var viewModel = new WagerFormViewModel()
                {
                    Games = _context.Games.Where(x => x.Active == true).ToList(),
                    Wager = wager
                };
                return(View("WagerForm", viewModel));
            }

            if (wager.Id == 0)
            {
                ApplicationUser user = System.Web.HttpContext.Current.GetOwinContext()
                                       .GetUserManager <ApplicationUserManager>()
                                       .FindById(System.Web.HttpContext.Current.User.Identity.GetUserId());
                wager.ApplicationUserId = user.Id;

                _context.Wagers.Add(wager);
            }
            else
            {
                var wagerInDb = _context.Wagers.Single(w => w.Id == wager.Id);

                wagerInDb.GameId      = wager.GameId;
                wagerInDb.HomeOrVisit = wager.HomeOrVisit;
                wagerInDb.Amount      = wager.Amount;
            }

            _context.SaveChanges();
            return(RedirectToAction("Index", "Wager"));
        }
Ejemplo n.º 5
0
        public void ExpectedResults_ReturnsCorrectly()
        {
            var wager = new Wager <IResultSet>(_bet.Object, _expectedResults.Object, _stake.Object);

            _expectedResults.Setup(_ => _.Equals(_expectedResults.Object)).Returns(true);

            Assert.Equal(_expectedResults.Object, wager.ExpectedResults);
        }
Ejemplo n.º 6
0
        public void GetOutcome_ReturnsCorrectly()
        {
            var wager = new Wager <IResultSet>(_bet.Object, _expectedResults.Object, _stake.Object);

            _bet.Setup(_ => _.GetOutcome(wager, _expectedResults.Object)).Returns(_outcome.Object);

            Assert.Equal(_outcome.Object, wager.GetOutcome(_expectedResults.Object));
        }
Ejemplo n.º 7
0
 public static WagerResult ToWagerResult(this Wager wager, decimal returns)
 {
     return(new WagerResult
     {
         Username = wager.Username,
         Returns = returns,
         InFavour = wager.InFavour
     });
 }
Ejemplo n.º 8
0
        public async Task <Wager> Create(Wager wager)
        {
            await using var context = new CraigBotDbContext();

            var newWager = (await context.Wagers.AddAsync(wager)).Entity;

            await context.SaveChangesAsync();

            return(newWager);
        }
        public void Post([FromBody] Wager value)
        {
            var content = new StringContent(JsonConvert.SerializeObject(value).ToString(), Encoding.UTF8, "application/json");

            using (var httpClient = new HttpClient())
            {
                httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36");

                var response = httpClient.PostAsync(new Uri(url), content).Result;
            }
        }
Ejemplo n.º 10
0
        public static double GetRaiseAmount(Wager wager, double pot, double wagerToCall)
        {
            switch (wager)
            {
            case Wager.Half:
                var raiseAmount = wagerToCall + (wagerToCall + pot) / 2;

                return(raiseAmount);

            default:
                throw new System.InvalidOperationException();
            }
        }
Ejemplo n.º 11
0
        public async Task <Wager> CreateWager(IUser user, int betId, decimal stake, bool inFavour)
        {
            var wager = new Wager
            {
                UserId   = user.Id,
                BetId    = betId,
                Username = user.Username,
                Stake    = stake,
                InFavour = inFavour
            };

            var newWager = await _wagerRepository.Create(wager);

            return(newWager);
        }
Ejemplo n.º 12
0
        public void TestUserLosesIfNotDouble()
        {
            var wager = new Wager()
            {
                Stake = 1.0f
            };
            var diceRoll   = new DiceRollMachine();
            var testRoller = new TestDiceRollProvider();

            diceRoll.DiceRoller           = testRoller;
            testRoller.PreDeterminedRolls = new[] { 6, 1 };
            var result = diceRoll.Play(wager);

            Assert.IsFalse(result.IsSuccess);
        }
Ejemplo n.º 13
0
        public void TestPaysOutNinePoundOnDoubleSix()
        {
            var wager = new Wager()
            {
                Stake = 1.0f
            };
            var diceRoll   = new DiceRollMachine();
            var testRoller = new TestDiceRollProvider();

            diceRoll.DiceRoller           = testRoller;
            testRoller.PreDeterminedRolls = new[] { 6, 6 };
            var result = diceRoll.Play(wager);

            Assert.AreEqual(9.0f, result.Returns, 0.01f);
        }
Ejemplo n.º 14
0
        public async Task AddWagerAsync(long challengeId, long userId, decimal amount)
        {
            var targetChallenge = await this.Context.Challenges.FirstOrDefaultAsync(x => x.Id == challengeId);

            var targetUser = await this.Context.Users.FirstOrDefaultAsync(x => x.Id == userId);

            var newWager = new Wager()
            {
                DateCreated = DateTime.UtcNow,
                Challenge   = targetChallenge,
                Amount      = amount,
                Principal   = this.Principal,
                User        = targetUser
            };

            await this.Context.Wagers.AddAsync(newWager);
        }
Ejemplo n.º 15
0
        public async Task <IActionResult> GetControlWager(int id)
        {
            string?userId = User.GetId();

            Wager wager = await _context.Wagers.AsNoTracking().Where(x => x.Id == id).Include(x => x.Hosts).ThenInclude(x => x.Profile).Include(x => x.Challenges).ThenInclude(x => x.Challengers).ThenInclude(x => x.Profile).FirstOrDefaultAsync();

            if (wager == null)
            {
                _errorMessages.Name = "Wager";
                ModelState.AddModelError(string.Empty, _errorMessages.NotFound);
                return(BadRequest(ModelState));
            }
            if (!wager.Hosts.Any(x => x.ProfileId == userId))
            {
                ModelState.AddModelError(string.Empty, "You are not a host of this wager.");
                return(BadRequest(ModelState));
            }
            return(Ok(wager));
        }
Ejemplo n.º 16
0
        public void Wager_IsApproved_ReturnFalse(bool[] approved)
        {
            //Arrange
            var wager = new Wager
            {
                Hosts = new List <WagerHostBid>()
            };

            foreach (bool b in approved)
            {
                wager.Hosts.Add(new WagerHostBid {
                    Approved = b
                });
            }
            //Act
            var result = wager.IsApproved();

            //Assert
            Assert.False(result);
        }
Ejemplo n.º 17
0
        public void Wager_IsApproved_ReturnTrue(int approvedCount)
        {
            //Arrange
            var wager = new Wager
            {
                Hosts = new List <WagerHostBid>()
            };

            for (int i = 0; i < approvedCount; i++)
            {
                wager.Hosts.Add(new WagerHostBid {
                    Approved = true
                });
            }
            //Act
            var result = wager.IsApproved();

            //Assert
            Assert.True(result);
        }
Ejemplo n.º 18
0
        public ActionResult Default(string id)
        {
            var user = _context.Users.SingleOrDefault(c => c.Id == id);

            if (user == null)
            {
                return(HttpNotFound());
            }

            var games = _context.Games
                        .Where(a => a.Active == true)
                        .OrderByDescending(b => b.Spread).ToList();
            var g1   = games.First();
            var g2   = games.Last();
            var game = (Math.Abs((double)g1.Spread) > Math.Abs((double)g2.Spread)) ? g1 : g2;

            Wager defaultWager = new Wager();

            defaultWager.Amount            = (int)user.getMinWager();
            defaultWager.ApplicationUserId = user.Id;
            defaultWager.GameId            = game.Id;
            defaultWager.HomeOrVisit       = (game.Spread < 0) ? "Home" : "Away";

            var wagers = _context.Wagers
                         .Where(w => w.Game.Active)
                         .Where(w => w.ApplicationUserId == user.Id)
                         .ToList();

            foreach (var w in wagers)
            {
                _context.Wagers.Remove(w);
            }
            _context.SaveChanges();
            _context.Wagers.Add(defaultWager);

            _context.SaveChanges();
            return(RedirectToAction("Index", "User"));
        }
Ejemplo n.º 19
0
        public IActionResult Create([Bind("GameTeamId,WagerGameTeamSpreadMoneylineOfBet,WagerGameTeamSpreadOfBet,WagerType,WagerAmount,WinAmount,PayoutAmount,UpdatedBy,WagerGameTeamTeamName,GameId")] CreateWager createWager)
        {
            _logger.LogInformation("entered create wager");

            var   client = new HttpClient();
            Wager wager  = new Wager
            {
                GameId               = createWager.GameId,
                GameTeamId           = createWager.GameTeamId,
                WagerType            = createWager.WagerType,
                WagerAmount          = createWager.WagerAmount,
                WinAmount            = createWager.WinAmount,
                PayoutAmount         = createWager.PayoutAmount,
                TeamName             = createWager.WagerGameTeamTeamName,
                SpreadOfBet          = createWager.WagerGameTeamSpreadOfBet,
                SpreadMoneylineOfBet = createWager.WagerGameTeamSpreadMoneylineOfBet
            };
            string json          = JsonConvert.SerializeObject(wager);
            var    stringContent = new StringContent(json, Encoding.UTF8, "application/json");
            var    response      = client.PostAsync($"{baseUrl}/api/Wagers", stringContent).Result;

            return(View("Confirm", createWager));
        }
Ejemplo n.º 20
0
        public async Task RunBlackJackAsync(ArcadeUser invoker, ISocketMessageChannel channel, Wager wager)
        {
            if (!invoker.CanGamble)
            {
                return;
            }

            if (wager.Value < 0)
            {
                await channel.SendMessageAsync($"> 👁️ You can't specify a **negative** value.\n> *\"I know what you were trying to do.\"*");

                return;
            }

            if (wager.Value == 0)
            {
                await channel.SendMessageAsync($"> ⚠️ You need to specify a positive amount of **Chips** to bet.");

                return;
            }

            if (wager.Value > invoker.ChipBalance)
            {
                await channel.SendMessageAsync($"> ⚠️ You don't have enough **Chips** to bet with.");

                return;
            }

            invoker.CanGamble = false;
            var session = new BlackJackSession(invoker, channel, wager.Value);

            try
            {
                var options = new SessionOptions
                {
                    ResetTimeoutOnAttempt = true,
                    Timeout = TimeSpan.FromSeconds(15),
                    Session = session
                };

                bool Filter(SocketMessage message, int index)
                {
                    return(message.Author.Id == invoker.Id && message.Channel.Id == channel.Id);
                }

                await _collector.MatchAsync(Filter, options);
            }
            catch (Exception e)
            {
                await channel.CatchAsync(e);
            }

            invoker.CanGamble = true;
        }
Ejemplo n.º 21
0
        public void Stake_ReturnsCorrectly()
        {
            var wager = new Wager <IResultSet>(_bet.Object, _expectedResults.Object, _stake.Object);

            Assert.Equal(_stake.Object, wager.Stake);
        }
Ejemplo n.º 22
0
        public async Task <IActionResult> PostWager(Wager wagerData)
        {
            string?userId   = User.GetId();
            string?userName = User.GetName();
            string?userKey  = User.GetKey();

            if (userKey == null)
            {
                ModelState.AddModelError(string.Empty, "User does not have a public key registered.");
            }
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            WagerHostBid caller = wagerData.Hosts.FirstOrDefault(x => x.ProfileId == userId);

            if (wagerData.Hosts.Sum(x => x.ReceivablePt) != 100)
            {
                ModelState.AddModelError(string.Empty, "The hosts receivable percentages do not add up to 100.");
            }
            if (wagerData.Hosts.Sum(x => x.PayablePt) != 100)
            {
                ModelState.AddModelError(string.Empty, "The hosts payable percentages do not add up to 100.");
            }
            if (caller == null)
            {
                ModelState.AddModelError(string.Empty, "Caller must be a host.");
            }
            else if (!caller.IsOwner)
            {
                ModelState.AddModelError(string.Empty, "Caller must be the owner.");
            }
            if (!wagerData.HostIds().IsUnique())
            {
                ModelState.AddModelError(string.Empty, "The hosts are not unique.");
            }
            try
            {
                if (wagerData.Hosts.Single(x => x.IsOwner) == null)
                {
                    throw new Exception("Only 1 owner should be specified.");
                }
            }
            catch (Exception e)
            {
                ModelState.AddModelError(string.Empty, e.Message);
            }

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            DateTime date  = DateTime.Now;
            Wager    wager = new Wager //prevents overposting
            {
                GameId         = wagerData.GameId,
                Date           = date,
                Description    = wagerData.Description,
                MinimumWager   = wagerData.MinimumWager,
                MaximumWager   = wagerData.MaximumWager,
                IsPrivate      = wagerData.IsPrivate,
                Status         = 0,
                Hosts          = new List <WagerHostBid>(),
                ChallengeCount = 0
            };

            foreach (WagerHostBid host in wagerData.Hosts)
            {
                WagerHostBid bid = new WagerHostBid
                {
                    Approved     = null,
                    IsOwner      = false,
                    ReceivablePt = host.ReceivablePt,
                    PayablePt    = host.PayablePt,
                    ProfileId    = host.ProfileId
                };
                if (host.IsOwner)
                {
                    bid.Approved = true;
                    bid.IsOwner  = true;
                }
                wager.Hosts.Add(bid);
            }

            if (wager.IsApproved())
            {
                wager.Status = (byte)Status.Confirmed;
            }

            _context.Wagers.Add(wager);
            _context.SaveChanges();
            PersonalNotification notification = new PersonalNotification
            {
                Date      = date,
                Message   = $"{userName} created a wager with you.",
                Data      = wager.Id.ToString(),
                DataModel = (byte)DataModel.Wager
            };
            IEnumerable <string>        others        = wager.HostIds().Where(x => x != userId);
            List <PersonalNotification> notifications = NotificationHandler.AddNotificationToUsers(_context, others, notification);
            await SignalRHandler.SendNotificationsAsync(_context, _hubContext, others, notifications);

            return(Ok(new { id = wager.Id, status = wager.Status }));
        }
Ejemplo n.º 23
0
 public async Task BlackJackAsync(Wager wager)
 {
     await _service.RunBlackJackAsync(Context.Account, Context.Channel, wager).ConfigureAwait(false);
 }
Ejemplo n.º 24
0
        public Embed Generate()
        {
            EmbedBuilder       e = EmbedData.DefaultEmbed;
            EmbedFooterBuilder f = new EmbedFooterBuilder();

            f.WithText(ToString());

            // Colors
            Color onEmptyColor = EmbedData.GetColor("steamerror");
            Color onLoseColor  = EmbedData.GetColor("error");
            Color onWinColor   = EmbedData.GetColor("origreen");

            // Titles
            string onWinTitle  = "+ {0}";
            string onLoseTitle = "- {0}";
            string onOORTitle  = "> {0}";

            // Money display
            string money = $"{EmojiIndex.Balance}" + "{0}".MarkdownBold();

            string defLoseDesc  = "You lost at chance at {0}.";
            string defWinDesc   = "You have earned " + "(x{0})".MarkdownBold() + " the initial bet!";
            string defEmptyDesc = "You do know you need money, right?";
            string defOORDesc   = "You asked to wager a bit too much.";

            // exceptions based on balance.
            if (Player.Balance == 0)
            {
                e.WithColor(onEmptyColor);
                e.WithTitle(string.Format(money, "null"));
                e.WithDescription(defEmptyDesc);

                return(e.Build());
            }
            if (Player.Balance - Wager < 0)
            {
                if (!Player.Config.Overflow)
                {
                    e.WithColor(onEmptyColor);
                    e.WithTitle(string.Format(onOORTitle, string.Format(money, Player.Balance.ToPlaceValue())));
                    e.WithDescription(defOORDesc);

                    return(e.Build());
                }
                Wager = Player.Balance;
            }

            Player.Take((ulong)Wager);
            e.WithFooter(f);

            if (Victory)
            {
                Player.Give((ulong)Reward);
                e.WithColor(onWinColor);
                e.WithTitle(string.Format(onWinTitle, string.Format(money, Reward.ToPlaceValue())));
                e.WithDescription(string.Format(defWinDesc, Risk.ToString("##,0.0#")));

                return(e.Build());
            }
            else
            {
                e.WithColor(onLoseColor);
                e.WithTitle(string.Format(onLoseTitle, string.Format(money, Wager.ToPlaceValue())));
                e.WithDescription(LosingSummary ?? string.Format(defLoseDesc, string.Format(money, Reward.ToPlaceValue())));

                return(e.Build());
            }
        }
Ejemplo n.º 25
0
        private void GenerateTestDataForTopTen()
        {
            var redisDb = RedisConnectionFactory.Instance.GetDatabase(GroupTypeEnum.Cache, "redis01");
            var rnd = new Random(DateTime.Now.Millisecond);

            for (int i = 0; i < 100; i++)
            {
                var stake = rnd.Next(100, 10000);
                var winningAmt = rnd.Next(-70, 30) * stake;

                var wager = new Wager
                {
                    WagerId = i + 1,
                    UserCode = "Member" + (i + 1).ToString().PadLeft(2, '0'),
                    Stake = stake,
                    WinningAmount = winningAmt <= 0 ? 0 : winningAmt,
                };
                redisDb.HashSet("EXAM:WAGERS", wager.WagerId, JsonConvert.SerializeObject(wager));
            }
        }