Ejemplo n.º 1
0
        public async Task chooseMonthlyWinner(object obj)
        {
            var mdaydiff = DateTime.Now.EndOfMonth(18, 0, 0, 0) - DateTime.Now;

            //var mdaydiff = DateTime.Now.NextFiveMinutes() - DateTime.Now;

            if (mdaydiff.TotalMinutes >= 0 && mdaydiff.TotalMinutes <= 1)
            {
                if ((int)Math.Floor(mdaydiff.TotalSeconds) < 1)
                {
                    //Perform Winner Selection at the 0th second

                    try
                    {
                        var businessWinnerIds = await ChooseWinnerAsync("monthly", EntityTypes.Business);

                        var monthlyLuckymeWinnerIds = await ChooseWinnerAsync("monthly", EntityTypes.Luckyme);

                        var selectedBusinesses      = context.Businesses.Where(i => businessWinnerIds.Contains(i.Id));
                        var selectedmonthlyLuckyMes = context.LuckyMes.Where(i => monthlyLuckymeWinnerIds.Contains(i.Id));


                        //Put a dummy daily luckyme
                        DummyService.FixLuckyMeMonthlyDummy();

                        //Put a Business DummyStake
                        DummyService.FixBusinessDummy();


                        if (selectedBusinesses?.Count() > 0)
                        {
                            //send the selected scholarship to the UI
                            await WinnerSelectionHub.Clients.All.SendAsync("businessWinner", selectedBusinesses.Select(i => new BusinessParticipantDTO
                            {
                                Id           = i.Id,
                                UserName     = i.User.FirstName + " " + i.User.LastName,
                                UserId       = i.UserId,
                                AmountStaked = i.Amount.ToString("0.##"),
                                AmountToWin  = i.AmountToWin.ToString("0.##"),
                                Status       = i.Status,
                                DateDeclared = i.DateDeclared
                            }));

                            //clear all current participants
                            await StakersHub.Clients.All.SendAsync("getCurrentBusinessParticipants", DataHub.GetBusinessParticipants());
                        }
                        else
                        {
                            //send a blank winner
                            await WinnerSelectionHub.Clients.All.SendAsync("businessWinner", new List <BusinessParticipantDTO>(){ new BusinessParticipantDTO
                                                                                                                                  {
                                                                                                                                      UserName     = "******",
                                                                                                                                      UserId       = "",
                                                                                                                                      AmountStaked = "",
                                                                                                                                      AmountToWin  = ""
                                                                                                                                  } });
                        }

                        if (selectedmonthlyLuckyMes?.Count() > 0)
                        {
                            //send the selected scholarship to the UI
                            await WinnerSelectionHub.Clients.All.SendAsync("monthlyLuckymeWinner", selectedmonthlyLuckyMes.Select(i => new LuckyMeParticipantDTO
                            {
                                Id           = i.Id,
                                UserName     = i.User.FirstName + " " + i.User.LastName,
                                UserId       = i.UserId,
                                AmountStaked = i.Amount.ToString("0.##"),
                                AmountToWin  = i.AmountToWin.ToString("0.##"),
                                Status       = i.Status,
                                DateDeclared = i.DateDeclared
                            }));

                            //clear all current participants
                            await StakersHub.Clients.All.SendAsync("getCurrentMonthlyLuckymeParticipants", DataHub.GetMonthlyLuckymeParticipants());
                        }
                        else
                        {
                            //send a blank winner
                            await WinnerSelectionHub.Clients.All.SendAsync("monthlyLuckymeWinner", new List <LuckyMeParticipantDTO>(){ new LuckyMeParticipantDTO
                                                                                                                                       {
                                                                                                                                           UserName     = "******",
                                                                                                                                           UserId       = "",
                                                                                                                                           AmountStaked = "",
                                                                                                                                           AmountToWin  = ""
                                                                                                                                       } });
                        }



                        await WinnerSelectionHub.Clients.All.SendAsync("ongoingMonthlyDraw", false);

                        await WinnerSelectionHub.Clients.All.SendAsync("ongoingMonthlyDraw", false);
                    }
                    catch (Exception ex)
                    {
                    }
                }
                else if ((int)Math.Floor(mdaydiff.TotalSeconds) > 1)
                {
                    await WinnerSelectionHub.Clients.All.SendAsync("ongoingMonthlyDraw", true);
                }
            }
            else
            {
                //Make sure the countdown does not run to negatives
                if (mdaydiff.TotalSeconds >= 0)
                {
                    await CountdownHub.Clients.All.SendAsync("getMonthlyTime", mdaydiff.Days, mdaydiff.Hours, mdaydiff.Add(TimeSpan.FromMinutes(-1)).Minutes, mdaydiff.Seconds);
                }
            }
        }