Пример #1
0
        private static IEnumerable <EmbedBuilder> BettorEmbeds(Bet bet)
        {
            if (bet == null || bet.Bettors.Count() == 0)
            {
                return(new List <EmbedBuilder>());
            }

            var groups = bet.Bettors
                         .GroupBy(b => b.BetOptionId)
                         .Select(g =>
            {
                BetOption option = bet.Options.FirstOrDefault(o => o.Id == g.Key);

                IEnumerable <string> bettors = g
                                               .OrderByDescending(b => b.Amount)
                                               .Select(b => $"{MentionUtils.MentionUser(b.UserId)} bet {b.Amount} Attarcoins.");

                return(new EmbedBuilder()
                       .WithColor(Color.Green)
                       .WithTitle($"Option \"{option.Name}\" on bet \"{bet.Name}\"")
                       .WithDescription($"Id: [{option.Id}]\nOdds: ({option.Odds:F})\n\n{string.Join("\n", bettors)}"));
            });

            return(groups);
        }
Пример #2
0
        public static Embed MineBets(IEnumerable <Bet> bets, ulong userId)
        {
            if (!bets.Any())
            {
                return(BetHelp());
            }

            IEnumerable <EmbedFieldBuilder> fields = bets.Select(bet =>
            {
                List <string> options = bet.Options.Select(option =>
                {
                    int betted = bet.Bettors
                                 .Where(b => b.BetOptionId == option.Id)
                                 .Aggregate(0, (total, b) => total + b.Amount);
                    return($"[{option.Id}] ({option.Odds:F}) {option.Name} with the weight of {betted} coins.");
                }).ToList();

                Bettor bettor           = bet.Bettors.FirstOrDefault(b => b.UserId == userId);
                BetOption bettorsOption = bet.Options.FirstOrDefault(o => o.Id == bettor.BetOptionId);
                options.Add($"\nYou placed {bettor.Amount} Attarcoin on option \"{bettorsOption.Name}\". {(bettor.Released ? "(Released)" : "")}");

                return(new EmbedFieldBuilder()
                       .WithIsInline(false)
                       .WithName($"{bet.Name} ({(bet.Resolved ? "Inactive" : "Active")})")
                       .WithValue(options.Count == 0 ? "No options added yet." : string.Join("\n", options)));
            });

            return(new EmbedBuilder()
                   .WithTitle("Your bets")
                   .WithColor(Color.Green)
                   .WithFields(fields)
                   .Build());
        }
Пример #3
0
        public async Task <BetOption> AddBetOption(string name, float odds, string betName)
        {
            Bet bet = await _repository.GetBetByName(betName);

            if (bet == null)
            {
                return(null);
            }

            if (bet.Resolved)
            {
                return(null);
            }

            if (odds <= 1)
            {
                return(null);
            }

            BetOption newOption = new BetOption
            {
                Id   = bet.Options.Count() + 1,
                Name = name,
                Odds = odds
            };

            bet.Options = bet.Options.Concat(new[] { newOption });
            await _repository.UpdateBet(bet);

            await _repository.SaveAsync();

            return(newOption);
        }
Пример #4
0
        private static EmbedFieldBuilder BettorDescription(Bet bet)
        {
            var builder = new EmbedFieldBuilder()
                          .WithName("Bettors")
                          .WithIsInline(false);

            if (bet == null || bet.Bettors.Count() == 0)
            {
                return(builder.WithValue("none"));
            }

            var groups = bet.Bettors
                         .GroupBy(b => b.BetOptionId)
                         .Select(g =>
            {
                BetOption option             = bet.Options.FirstOrDefault(o => o.Id == g.Key);
                IEnumerable <string> bettors = g
                                               .OrderByDescending(b => b.Amount)
                                               .Select(b => $"{MentionUtils.MentionUser(b.UserId)} bet {b.Amount} Attarcoins.");

                return($"[{option.Id}] ({option.Odds:F}) {option.Name}\n\n{string.Join("\n", bettors)}");
            });

            string message = string.Join("\n\n", groups);

            if (message.Length > EmbedFieldBuilder.MaxFieldValueLength)
            {
                return(null);
            }

            return(builder.WithValue(message));
        }
Пример #5
0
        public void MarkCorrect(BetOption betOption)
        {
            var outcome = _context.BetOptions.Find(betOption.Id);

            outcome.Correct = true;
            _context.SaveChanges();
        }
Пример #6
0
 public void TakeBet(Bettor bettor, BetOption outcome, Brother brother)
 {
     if (bettor == null)
     {
         throw new ArgumentNullException(nameof(bettor));
     }
     if (bettor.Id == default(int))
     {
         throw new ArgumentException(nameof(bettor));
     }
     if (outcome == null)
     {
         throw new ArgumentNullException(nameof(outcome));
     }
     if (outcome.Id == default(int))
     {
         throw new ArgumentException(nameof(outcome));
     }
     if (brother == null)
     {
         throw new ArgumentNullException(nameof(brother));
     }
     if (brother.Id == default(int))
     {
         throw new ArgumentException(nameof(brother));
     }
     _betRepository.TakeBet(bettor, outcome, brother);
 }
Пример #7
0
 public void MarkAsComplete(BetOption betOption, Bettor bettor)
 {
     if (betOption == null)
     {
         throw new ArgumentNullException(nameof(betOption));
     }
     if (betOption.Id == default(int))
     {
         throw new ArgumentException(nameof(betOption));
     }
     if (bettor == null)
     {
         throw new ArgumentNullException(nameof(bettor));
     }
     if (bettor.Id == default(int))
     {
         throw new ArgumentException(nameof(bettor));
     }
     if (betOption.Bet.Complete)
     {
         throw new Exception("Bet Already Complete");
     }
     _betRepository.MarkComplete(betOption.Bet, bettor);
     _betRepository.MarkCorrect(betOption);
     _betRepository.AddPointsToSuccessfulGuess(betOption, 100);
 }
Пример #8
0
        public static IEnumerable <Embed> BetOptionCreated(Bet bet, BetOption option, IUser author)
        {
            var builder = new EmbedBuilder()
                          .WithAuthor(author)
                          .WithTitle("Bet option added")
                          .WithDescription($"Bet option '{option.Name}' added to bet '{bet.Name}'.")
                          .AddField("Place bet", $"$bet-place \"{bet.Name}\" {option.Id} AMOUNT")
                          .WithColor(Color.Green);

            return(WithBettors(bet, builder));
        }
Пример #9
0
        public void AddPointsToSuccessfulGuess(BetOption betOption, long points)
        {
            var successfulGuessers = _context.Predictions
                                     .Where(p => p.OutcomePredicted.Id == betOption.Id)
                                     .Select(p => p.Bettor);

            foreach (var bettor in successfulGuessers)
            {
                bettor.Points += points;
            }
            _context.SaveChanges();
        }
Пример #10
0
        public void MarkAsComplete_AlreadyComplete_ThrowsException()
        {
            var repo             = new Mock <IBetRepository>();
            var bookie           = new BookMaker(repo.Object);
            var completedOutcome = new BetOption()
            {
                Id  = 1,
                Bet = new Bet()
                {
                    Id = 1, Complete = true
                }
            };

            Assert.Throws <Exception>(() => bookie.MarkAsComplete(completedOutcome, ValidBettor));
        }
Пример #11
0
        public void TakeBet(Bettor bettor, BetOption outcome, Brother brother)
        {
            brother = _context.Brothers.Find(brother.Id);
            var prediction = new Prediction()
            {
                Bettor           = _context.Bettors.Find(bettor.Id),
                OutcomePredicted = _context.BetOptions.Find(outcome.Id),
                TimeOfPrediction = DateTime.Now
            };

            if (brother.Predictions == null)
            {
                brother.Predictions = new List <Prediction>();
            }
            brother.Predictions.Add(prediction);
            _context.SaveChanges();
        }
Пример #12
0
        public void MarkAsComplete_Valid_MarksBetAsComplete_AndAddsPoints()
        {
            var repo    = new Mock <IBetRepository>();
            var bookie  = new BookMaker(repo.Object);
            var outcome = new BetOption()
            {
                Id  = 1,
                Bet = new Bet()
                {
                    Id = 1
                }
            };

            bookie.MarkAsComplete(outcome, ValidBettor);
            repo.Verify(m => m.MarkComplete(It.IsAny <Bet>(), It.IsAny <Bettor>()));
            repo.Verify(m => m.MarkCorrect(It.IsAny <BetOption>()));
            repo.Verify(m => m.AddPointsToSuccessfulGuess(It.IsAny <BetOption>(), It.IsAny <long>()));
        }
Пример #13
0
        public async Task <IEnumerable <BetReward> > Resolve(string betName, int betOptionId)
        {
            Bet bet = await _repository.GetBetByName(betName);

            BetOption option = bet.Options.FirstOrDefault(o => o.Id == betOptionId);

            if (bet == null || bet.Resolved || option == null)
            {
                return(new List <BetReward>());
            }

            bet.Resolved = true;
            await _repository.UpdateBet(bet);

            await _repository.SaveAsync();

            return(bet.Bettors
                   .Where(bettor => bettor.BetOptionId == betOptionId)
                   .Select(w => new BetReward
            {
                UserId = w.UserId,
                Amount = (int)Math.Round(option.Odds * w.Amount)
            }));
        }
Пример #14
0
        private static string BetOptionNameById(Bet bet, int betOptionId)
        {
            BetOption option = bet.Options.FirstOrDefault(o => o.Id == betOptionId);

            return(option?.Name ?? "unknown");
        }
Пример #15
0
 public Bet(int mStake, BetOption mBetOption)
 {
     stake = mStake;
     bet   = mBetOption;
 }
Пример #16
0
    void PopulateBetOptions()
    {
        //Create the bet options for the individual numbers, with a mulitplier of 36
        for (int i = 0; i < 37; i++)
        {
            RouletteNumber[] individualNumber = new RouletteNumber[1];
            individualNumber[0] = rouletteNumbers[i];
            betOptions[i]       = new BetOption(individualNumber, 36, i);
        }



        List <RouletteNumber> cBlack      = new List <RouletteNumber>();
        List <RouletteNumber> cRed        = new List <RouletteNumber>();
        List <RouletteNumber> lOdd        = new List <RouletteNumber>();
        List <RouletteNumber> lEven       = new List <RouletteNumber>();
        List <RouletteNumber> lFirstHalf  = new List <RouletteNumber>();
        List <RouletteNumber> lSecondHalf = new List <RouletteNumber>();
        List <RouletteNumber> lFirst12    = new List <RouletteNumber>();
        List <RouletteNumber> lSecond12   = new List <RouletteNumber>();
        List <RouletteNumber> lThird12    = new List <RouletteNumber>();

        for (int i = 0; i < rouletteNumbers.Length; i++)
        {
            if (rouletteNumbers[i].color == "Black")
            {
                cBlack.Add(rouletteNumbers[i]);
            }
            if (rouletteNumbers[i].color == "Red")
            {
                cRed.Add(rouletteNumbers[i]);
            }
            if (rouletteNumbers[i].number % 2 == 1)
            {
                lOdd.Add(rouletteNumbers[i]);
            }
            if (rouletteNumbers[i].number % 2 == 0 && rouletteNumbers[i].number != 0)
            {
                lEven.Add(rouletteNumbers[i]);
            }
            if (rouletteNumbers[i].number > 0 && rouletteNumbers[i].number < 19)
            {
                lFirstHalf.Add(rouletteNumbers[i]);
            }
            if (rouletteNumbers[i].number > 18)
            {
                lSecondHalf.Add(rouletteNumbers[i]);
            }
            if (rouletteNumbers[i].number > 0 && rouletteNumbers[i].number < 13)
            {
                lFirst12.Add(rouletteNumbers[i]);
            }
            if (rouletteNumbers[i].number > 12 && rouletteNumbers[i].number < 25)
            {
                lSecond12.Add(rouletteNumbers[i]);
            }
            if (rouletteNumbers[i].number > 24)
            {
                lThird12.Add(rouletteNumbers[i]);
            }
        }

        RouletteNumber[] colorBlack = cBlack.ToArray();
        RouletteNumber[] colorRed   = cRed.ToArray();
        RouletteNumber[] odd        = lOdd.ToArray();
        RouletteNumber[] even       = lEven.ToArray();
        RouletteNumber[] firstHalf  = lFirstHalf.ToArray();
        RouletteNumber[] secondHalf = lSecondHalf.ToArray();
        RouletteNumber[] first12    = lFirst12.ToArray();
        RouletteNumber[] second12   = lSecond12.ToArray();
        RouletteNumber[] third12    = lThird12.ToArray();

        betOptions[37] = new BetOption(colorBlack, 2, 37);
        betOptions[38] = new BetOption(colorRed, 2, 38);
        betOptions[39] = new BetOption(odd, 2, 39);
        betOptions[40] = new BetOption(even, 2, 40);
        betOptions[41] = new BetOption(firstHalf, 2, 41);
        betOptions[42] = new BetOption(secondHalf, 2, 42);
        betOptions[43] = new BetOption(first12, 3, 43);
        betOptions[44] = new BetOption(second12, 3, 44);
        betOptions[45] = new BetOption(third12, 3, 45);
    }
Пример #17
0
        static Task <int> UpdateGamesTask()
        {
            try
            {
                var files = new[] { "D:/Documents/BWay/rebetxmlfiles/GetSportEventsHalfTime.xml", "D:/Documents/BWay/rebetxmlfiles/GetSportEventsItalyEngland.xml" };

                var database = new ZeusDbContext();
                // start of files urls
                foreach (var file in files)
                {
                    var matches   = new List <Match>();
                    var matchodds = new List <MatchOdd>();
                    var xmldoc    = new XmlDocument();
                    xmldoc.Load(file);
                    var oddServiceNode = xmldoc.ChildNodes[1];
                    var resultsNode    = oddServiceNode.ChildNodes[1];

                    foreach (XmlNode eventNode in resultsNode)
                    {
                        var eventId = eventNode.ChildNodes[0].InnerText;
                        var unformattedStartDate = eventNode.ChildNodes[1].InnerText;
                        var startDateTime        = DateTime.Parse(unformattedStartDate);

                        var sportIdNode = eventNode.ChildNodes[2];
                        var sportId     = sportIdNode.InnerText;
                        var sportName   = (sportIdNode.Attributes != null) ? sportIdNode.Attributes["Name"].InnerText : String.Empty;

                        var leagueIdNode = eventNode.ChildNodes[3];
                        var leagueId     = leagueIdNode.InnerText;
                        var leagueName   = (leagueIdNode.Attributes != null) ? leagueIdNode.Attributes["Name"].InnerText : String.Empty;

                        var locationIdNode = eventNode.ChildNodes[4];
                        var locationId     = locationIdNode.InnerText;
                        var locationName   = (locationIdNode.Attributes != null) ? locationIdNode.Attributes["Name"].InnerText : String.Empty;

                        var lastUpdateTime = eventNode.ChildNodes[6].InnerText;
                        var homeTeamNode   = eventNode.ChildNodes[8];
                        var homeTeam       = (homeTeamNode.Attributes != null) ? homeTeamNode.Attributes["Name"].InnerText : String.Empty;

                        var awayTeamNode = eventNode.ChildNodes[9];

                        var awayTeam = awayTeamNode.Attributes != null
                            ? awayTeamNode.Attributes["Name"].InnerText
                            : String.Empty;

                        var outcomesNode = eventNode.ChildNodes[14];

                        Console.WriteLine("{0} -> {1} vs {2}", leagueName, homeTeam, awayTeam);
                        matches.Add(new Match
                        {
                            AwayTeamName      = awayTeam,
                            BetServiceMatchNo = Convert.ToInt32(eventId),
                            GameStatus        = "Not Started",
                            HomeTeamName      = homeTeam,
                            League            = leagueName,
                            RegistrationDate  = DateTime.Now,
                            ResultStatus      = 0,
                            StartTime         = startDateTime
                        });

                        if (!outcomesNode.HasChildNodes)
                        {
                            continue;
                        }

                        #region OutComes
                        foreach (XmlNode outcomeNode in outcomesNode.ChildNodes)
                        {
                            if (outcomeNode.Attributes == null)
                            {
                                continue;
                            }
                            var outcome = outcomeNode.Attributes["name"].InnerText;
                            //Console.WriteLine("{0} Odds", outcome);
                            var bookmakerNode = outcomeNode.ChildNodes[0];
                            var oddsNodes     = bookmakerNode.ChildNodes;

                            // Locate an out ome in the datbase with that particular name
                            var betcategory = new BetCategory
                            {
                                BetCategoryName = outcome
                            };

                            database.BetCategories.AddOrUpdate(bc => bc.BetCategoryName, betcategory);
                            database.SaveChanges();
                            switch (outcome)
                            {
                                #region 1x2 Odds
                            case "1X2":
                                foreach (XmlNode odd in oddsNodes)
                                {
                                    if (odd.Attributes == null)
                                    {
                                        continue;
                                    }
                                    var bet  = odd.Attributes["bet"].InnerText;
                                    var line = odd.Attributes["line"].InnerText;
                                    var unformattedLastUpdateTime = odd.Attributes["LastUpdate"].InnerText;
                                    var betoption = new BetOption
                                    {
                                        BetCategoryId = betcategory.BetCategoryId,
                                        Option        = bet,
                                        Line          = line
                                    };

                                    database.BetOptions.AddOrUpdate(
                                        bo => new { bo.Option, bo.BetCategoryId, bo.Line }, betoption);
                                    database.SaveChanges();
                                    var matchodd = new MatchOdd
                                    {
                                        BetServiceMatchNo = Convert.ToInt32(eventId),
                                        BetOptionId       = betoption.BetOptionId,
                                        LastUpdateTime    = DateTime.Parse(unformattedLastUpdateTime),
                                        Odd = Convert.ToDecimal(odd.Attributes["currentPrice"].InnerText)
                                    };
                                    matchodds.Add(matchodd);
                                }
                                break;
                                #endregion

                                #region Under/Over Odds
                            case "Under/Over":
                                foreach (XmlNode odd in oddsNodes)
                                {
                                    if (odd.Attributes == null)
                                    {
                                        continue;
                                    }
                                    var bet  = odd.Attributes["bet"].InnerText;
                                    var line = odd.Attributes["line"].InnerText;
                                    var unformattedLastUpdateTime = odd.Attributes["LastUpdate"].InnerText;
                                    var betoption = new BetOption
                                    {
                                        BetCategoryId = betcategory.BetCategoryId,
                                        Option        = bet,
                                        Line          = line
                                    };
                                    if (line != "0.5" && line != "1.5" && line != "2.5" && line != "3.5" &&
                                        line != "4.5" && line != "5.5" && line != "6.5")
                                    {
                                        continue;
                                    }
                                    database.BetOptions.AddOrUpdate(
                                        bo => new { bo.Option, bo.BetCategoryId, bo.Line }, betoption);
                                    database.SaveChanges();
                                    var matchodd = new MatchOdd
                                    {
                                        BetServiceMatchNo = Convert.ToInt32(eventId),
                                        BetOptionId       = betoption.BetOptionId,
                                        LastUpdateTime    = DateTime.Parse(unformattedLastUpdateTime),
                                        Odd = Convert.ToDecimal(odd.Attributes["currentPrice"].InnerText)
                                    };
                                    matchodds.Add(matchodd);
                                }
                                break;
                                #endregion

                                #region Double Chance Odds
                            case "Double Chance":
                                foreach (XmlNode odd in oddsNodes)
                                {
                                    if (odd.Attributes == null)
                                    {
                                        continue;
                                    }
                                    var bet  = odd.Attributes["bet"].InnerText;
                                    var line = odd.Attributes["line"].InnerText;
                                    var unformattedLastUpdateTime = odd.Attributes["LastUpdate"].InnerText;
                                    var betoption = new BetOption
                                    {
                                        BetCategoryId = betcategory.BetCategoryId,
                                        Option        = bet,
                                        Line          = line
                                    };

                                    database.BetOptions.AddOrUpdate(
                                        bo => new { bo.Option, bo.BetCategoryId, bo.Line }, betoption);
                                    database.SaveChanges();
                                    var matchodd = new MatchOdd
                                    {
                                        BetServiceMatchNo = Convert.ToInt32(eventId),
                                        BetOptionId       = betoption.BetOptionId,
                                        LastUpdateTime    = DateTime.Parse(unformattedLastUpdateTime),
                                        Odd = Convert.ToDecimal(odd.Attributes["currentPrice"].InnerText)
                                    };
                                    matchodds.Add(matchodd);
                                }
                                break;
                                #endregion

                                #region European Handicap
                            case "European Handicap":
                                foreach (XmlNode odd in oddsNodes)
                                {
                                    if (odd.Attributes == null)
                                    {
                                        continue;
                                    }
                                    var bet  = odd.Attributes["bet"].InnerText;
                                    var line = odd.Attributes["line"].InnerText;
                                    var unformattedLastUpdateTime = odd.Attributes["LastUpdate"].InnerText;
                                    var betoption = new BetOption
                                    {
                                        BetCategoryId = betcategory.BetCategoryId,
                                        Option        = bet,
                                        Line          = line
                                    };

                                    database.BetOptions.AddOrUpdate(
                                        bo => new { bo.Option, bo.BetCategoryId, bo.Line },
                                        betoption);
                                    database.SaveChanges();
                                    var matchodd = new MatchOdd
                                    {
                                        BetServiceMatchNo = Convert.ToInt32(eventId),
                                        BetOptionId       = betoption.BetOptionId,
                                        LastUpdateTime    = DateTime.Parse(unformattedLastUpdateTime),
                                        Odd = Convert.ToDecimal(odd.Attributes["currentPrice"].InnerText)
                                    };
                                    matchodds.Add(matchodd);
                                }
                                break;
                                #endregion

                                #region Both Teams To Score Odds
                            case "Both Teams To Score":
                                foreach (XmlNode odd in oddsNodes)
                                {
                                    if (odd.Attributes == null)
                                    {
                                        continue;
                                    }
                                    var bet  = odd.Attributes["bet"].InnerText;
                                    var line = odd.Attributes["line"].InnerText;
                                    var unformattedLastUpdateTime = odd.Attributes["LastUpdate"].InnerText;
                                    var betoption = new BetOption
                                    {
                                        BetCategoryId = betcategory.BetCategoryId,
                                        Option        = bet,
                                        Line          = line
                                    };

                                    database.BetOptions.AddOrUpdate(
                                        bo => new { bo.Option, bo.BetCategoryId, bo.Line }, betoption);
                                    database.SaveChanges();
                                    if (odd.Attributes == null)
                                    {
                                        continue;
                                    }
                                    var matchodd = new MatchOdd
                                    {
                                        BetServiceMatchNo = Convert.ToInt32(eventId),
                                        BetOptionId       = betoption.BetOptionId,
                                        LastUpdateTime    = DateTime.Parse(unformattedLastUpdateTime),
                                        Odd = Convert.ToDecimal(odd.Attributes["currentPrice"].InnerText)
                                    };
                                    matchodds.Add(matchodd);
                                }
                                break;
                                #endregion

                                #region Under/Over 1st Period
                            case "Under/Over 1st Period":
                                foreach (XmlNode odd in oddsNodes)
                                {
                                    if (odd.Attributes == null)
                                    {
                                        continue;
                                    }
                                    var bet  = odd.Attributes["bet"].InnerText;
                                    var line = odd.Attributes["line"].InnerText;
                                    var unformattedLastUpdateTime = odd.Attributes["LastUpdate"].InnerText;
                                    var betoption = new BetOption
                                    {
                                        BetCategoryId = betcategory.BetCategoryId,
                                        Option        = bet,
                                        Line          = line
                                    };

                                    database.BetOptions.AddOrUpdate(
                                        bo => new { bo.Option, bo.BetCategoryId, bo.Line }, betoption);
                                    database.SaveChanges();
                                    var matchodd = new MatchOdd
                                    {
                                        BetServiceMatchNo = Convert.ToInt32(eventId),
                                        BetOptionId       = betoption.BetOptionId,
                                        LastUpdateTime    = DateTime.Parse(unformattedLastUpdateTime),
                                        Odd = Convert.ToDecimal(odd.Attributes["currentPrice"].InnerText)
                                    };
                                    matchodds.Add(matchodd);
                                }
                                break;
                                #endregion

                                #region 1st Period Winner
                            case "1st Period Winner":
                                foreach (XmlNode odd in oddsNodes)
                                {
                                    if (odd.Attributes == null)
                                    {
                                        continue;
                                    }
                                    var bet  = odd.Attributes["bet"].InnerText;
                                    var line = odd.Attributes["line"].InnerText;
                                    var unformattedLastUpdateTime = odd.Attributes["LastUpdate"].InnerText;
                                    var betoption = new BetOption
                                    {
                                        BetCategoryId = betcategory.BetCategoryId,
                                        Option        = bet,
                                        Line          = line
                                    };

                                    database.BetOptions.AddOrUpdate(
                                        bo => new { bo.Option, bo.BetCategoryId, bo.Line }, betoption);
                                    database.SaveChanges();
                                    var matchodd = new MatchOdd
                                    {
                                        BetServiceMatchNo = Convert.ToInt32(eventId),
                                        BetOptionId       = betoption.BetOptionId,
                                        LastUpdateTime    = DateTime.Parse(unformattedLastUpdateTime),
                                        Odd = Convert.ToDecimal(odd.Attributes["currentPrice"].InnerText)
                                    };
                                    matchodds.Add(matchodd);
                                }
                                break;
                                #endregion
                            }
                        }
                        #endregion
                    }
                    // end of for each for file or url

                    try
                    {
                        const int chunkSize    = 100;
                        var       totalMatches = matches.Count;
                        var       chunksToSave = (totalMatches % chunkSize) > 0 ? (totalMatches / chunkSize) + 1 : totalMatches / chunkSize;
                        for (var i = 0; i < chunksToSave; i++)
                        {
                            var chunk     = matches.Skip(i * chunkSize).Take(chunkSize);
                            var startTime = DateTime.Now;
                            database.Matches.AddOrUpdate(m => m.BetServiceMatchNo, chunk.ToArray());
                            database.SaveChanges();
                            var endTime  = DateTime.Now;
                            var timeSpan = endTime - startTime;
                            Console.WriteLine("Matches in Chunk {0} Updated Successfully in {1} Seconds", i + 1, timeSpan.Seconds);
                        }

                        Console.WriteLine("Matches Updated Successfully");
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Error updating games: {0}.", ex.Message);
                    }
                    try
                    {
                        const int chunkSize      = 100;
                        var       totalMatchOdds = matchodds.Count;
                        var       chunksToSave   = (totalMatchOdds % chunkSize) > 0
                            ? (totalMatchOdds / chunkSize) + 1
                            : totalMatchOdds / chunkSize;

                        for (var i = 0; i < chunksToSave; i++)
                        {
                            var chunk     = matchodds.Skip(i * chunkSize).Take(chunkSize);
                            var startTime = new DateTime();
                            database.MatchOdds.AddOrUpdate(key => new { key.BetServiceMatchNo, key.BetOptionId }, chunk.ToArray());
                            database.SaveChanges();
                            var endTime  = new DateTime();
                            var timeSpan = endTime - startTime;
                            Console.WriteLine("MatchOdds in Chunk {0} Updated Successfully in {1} Seconds", i + 1, timeSpan.Seconds);
                        }
                        Console.WriteLine("All MatchOdds Updated Successfully");
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Error updating odds: {0}.", ex.Message);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception: " + ex.Message);
            }
            Console.ReadLine();
            return(Task.FromResult(0));
        }