예제 #1
0
        private CPlayerUpdate GetCoachUpdate(CompetitorData competitorData, string nationality, string coachFullName, DateTime?bornDate = null)
        {
            CPlayerUpdate coachUpdate = null;

            try
            {
                if (!string.IsNullOrWhiteSpace(coachFullName))
                {
                    coachUpdate = CreateUpdateAthleteObject();

                    coachUpdate.Name = coachFullName;

                    if (bornDate.HasValue)
                    {
                        coachUpdate.DOB = bornDate.Value;
                    }

                    coachUpdate.Position          = (int)ESoccerPlayerPositions.Management;
                    coachUpdate.FormationPosition = (int)ESoccerPlayerFormationPositions.Coach;
                    coachUpdate.Competitor        = competitorData.Name;
                    coachUpdate.Competition       = competitorData.CompetitionData.Name;
                    coachUpdate.Country           = competitorData.CompetitionData.Country;
                }
            }
            catch (Exception ex)
            {
                coachUpdate = null;
            }

            return(coachUpdate);
        }
예제 #2
0
 public CompetitorData(CompetitorData comp)
 {
     Id              = comp.Id;
     Name            = comp.Name;
     Link            = comp.Link;
     CompetitionData = new CompetitionData(comp.CompetitionData);
 }
예제 #3
0
        private async Task <ActionResult> ExecuteChampionship(ChampionshipModel model)
        {
            RPSSolver      solver      = new RPSSolver();
            Parser         parser      = new Parser();
            CompetitorData secondPlace = new CompetitorData();
            string         errorMessage;
            bool           result       = false;
            var            championship = parser.StringToCompetitors(model.Input, out errorMessage);

            if (string.IsNullOrEmpty(errorMessage))
            {
                CompetitorData[] finalists = solver.Solve(championship);
                model.Winner   = finalists[0].Name;
                model.Strategy = finalists[0].Strategy.ToString();
                secondPlace    = finalists[1];
                ApiClient client = new ApiClient();
                result = await client.SaveResult(model.Winner, secondPlace.Name);
            }
            else
            {
                model.ErrorMessage = errorMessage;
            }

            return(View("Execute", model));
        }
        public static Image UpdateEzdApi(CompetitorData competitor, int width, int height)
        {
            if (!string.IsNullOrEmpty(competitor.FirstName))
            {
                JczLmc.ChangeTextByName(JczLmc.GetEntityNameByIndex(0), competitor.FirstName);
            }

            if (!string.IsNullOrEmpty(competitor.LastName))
            {
                JczLmc.ChangeTextByName(JczLmc.GetEntityNameByIndex(1), competitor.LastName);
            }

            if (!string.IsNullOrEmpty(competitor.TimeOfDistance))
            {
                JczLmc.ChangeTextByName(JczLmc.GetEntityNameByIndex(2), competitor.TimeOfDistance);
            }

            if (!string.IsNullOrEmpty(competitor.Distance))
            {
                JczLmc.ChangeTextByName(JczLmc.GetEntityNameByIndex(3), competitor.Distance);
            }

            var img = JczLmc.GetCurPreviewImage(width, height);

            img = Images.SetImageTransparent(img);

            return(img);
        }
        public async Task <List <CompetitorData> > BuildCompetitorsListByCompetition(CompetitionData comptition)
        {
            var competitorList = new List <CompetitorData>();

            try
            {
                var param = string.Format(API_ExtraParam,
                                          HttpUtility.UrlEncode(string.Format(Competitions_CallbackParam, 2)),
                                          Competitions_Action,
                                          HttpUtility.UrlEncode(string.Format(Competitors_Param, comptition.ID)));

                var url = string.Format(ApiFormat, BASE_API_URL, Competitions_Block, param);

                var fetchResult = await _dataFetcher.FetchDom(url, true);

                var rawComptitor = fetchResult.HtmlDocument.DocumentNode.SelectNodes("//ul/li/.");
                if (rawComptitor != null)
                {
                    foreach (var rawComp in rawComptitor)
                    {
                        try
                        {
                            var rawLink = rawComp.SelectSingleNode(rawComp.XPath + "//a/.");

                            var link = rawLink.GetAttributeValue("href", "");
                            if (string.IsNullOrEmpty(link))
                            {
                            }
                            else
                            {
                                var comp = new CompetitorData
                                {
                                    Link            = link,
                                    Id              = ParseFunctions.ParsePositiveNumber(link, "/(?<num>\\d{2,})"),
                                    Name            = HttpUtility.HtmlDecode(rawLink.InnerText),
                                    CompetitionData = comptition
                                };

                                competitorList.Add(comp);
                            }
                        }
                        catch (Exception ex)
                        {
                        }
                    }
                }
            }
            catch (Exception exception)
            {
            }

            return(competitorList);
        }
예제 #6
0
        public IHttpActionResult NewMatch(NewChampionshipModel model)
        {
            RPSSolver      solver      = new RPSSolver();
            Parser         parser      = new Parser();
            CompetitorData secondPlace = new CompetitorData();
            string         errorMessage;
            var            championship = parser.StringToCompetitors(model.Data, out errorMessage);

            if (string.IsNullOrEmpty(errorMessage))
            {
                CompetitorData[] finalists = solver.Solve(championship);
                return(Ok(new { winner = new string[] { finalists[0].Name, finalists[0].Strategy.ToString() } }));
            }
            return(Json(new { status = "Error", message = errorMessage }));
        }
예제 #7
0
        private void HandleCompetitorScan(CompetitorData competitorData, ScanType scanType, Dictionary <string, CPlayerUpdate> competititorUpdates)
        {
            if (scanType == ScanType.DailyGames)
            {
                competitorData.LastScaned = new ScanContext(DateTime.UtcNow);
                if (competitorData.NextScan != null)
                {
                    competitorData.LastScaned.CompetitionData = competitorData.NextScan.CompetitionData;
                }
            }

            if (competititorUpdates != null && competititorUpdates.Count > 0)
            {
                var currentCompetition = scanType == ScanType.DailyGames && competitorData.NextScan != null
                    ? competitorData.NextScan.CompetitionData : competitorData.CompetitionData;

                RaiseEvent(competititorUpdates.Values);

                if (competitorData.TotalCareerScanCounter >= 15)
                {
                    ScanPlayerTotalStats(competititorUpdates).ContinueWith(t =>
                    {
                        competitorData.TotalCareerScanCounter = 0;
                    });
                }
                else
                {
                    competitorData.TotalCareerScanCounter++;
                }
            }
            else
            {
                var noSquadIndication = _noSquadCompetitors.GetOrAdd(competitorData.Link, s => 0);
                Interlocked.Increment(ref noSquadIndication);
                if (noSquadIndication > 3)
                {
                    CompetitorData removedCompetitorData;
                    if (!_competitors.TryRemove(competitorData.Link, out removedCompetitorData))
                    {
                    }
                    else
                    {
                        int counter;
                        _noSquadCompetitors.TryRemove(competitorData.Link, out counter);
                    }
                }
            }
        }
        private List <CompetitorData> ParseBasicGameDetails(HtmlNode node, DateTime date)
        {
            List <CompetitorData> game = null;

            try
            {
                var home = new CompetitorData();
                var away = new CompetitorData();

                home.Name = ParseFunctions.ExtractValueFromNode(node, "//td[@class='team team-a ']/a/.", "title");
                away.Name = ParseFunctions.ExtractValueFromNode(node, "//td[@class='team team-b ']/a/.", "title");

                home.Link = ParseFunctions.ExtractValueFromNode(node, "//td[@class='team team-a ']/a/.", "href");
                away.Link = ParseFunctions.ExtractValueFromNode(node, "//td[@class='team team-b ']/a/.", "href");

                home.Id = ParseFunctions.ParsePositiveNumber(home.Link, "/(?<num>\\d{2,})");
                away.Id = ParseFunctions.ParsePositiveNumber(away.Link, "/(?<num>\\d{2,})");

                var rawGameStartTime = ParseFunctions.ExtractValueFromNode(node, "//td[@class='score-time status']");
                var rawScore         = ParseFunctions.ExtractValueFromNode(node, "//td[@class='score-time score']");

                if (!string.IsNullOrEmpty(rawGameStartTime))
                {
                    var time        = ParseFunctions.ParseTime(rawGameStartTime);
                    var gameTime    = date.Date.Add(time).Subtract(DataFetcher.TimeOffset);
                    var scanContext = new ScanContext(gameTime);
                    home.NextScan = scanContext;
                    away.NextScan = scanContext;
                }
                else
                {
                    var gameTime    = date.Date.AddHours(16);
                    var scanContext = new ScanContext(gameTime);
                    home.NextScan = scanContext;
                    away.NextScan = scanContext;
                }

                game = new List <CompetitorData>()
                {
                    home, away
                };
            }
            catch (Exception exception)
            {
            }

            return(game);
        }
예제 #9
0
 /// <summary>
 /// Builds the result object with place 1 and place 2
 /// </summary>
 /// <param name="result"></param>
 /// <param name="playerAWins"></param>
 /// <param name="playerA"></param>
 /// <param name="playerB"></param>
 private void SetWinners(CompetitorData[] result, bool playerAWins, CompetitorData playerA, CompetitorData playerB)
 {
     try
     {
         if (playerAWins)
         {
             result[0] = playerA;
             result[1] = playerB;
         }
         else
         {
             result[0] = playerB;
             result[1] = playerA;
         }
     }
     catch
     {
         throw;
     }
 }
예제 #10
0
 /// <summary>
 /// Proccess the championship and returns the first and second place
 /// </summary>
 /// <param name="championship"></param>
 /// <returns></returns>
 public CompetitorData[] Solve(List <CompetitorData> championship)
 {
     CompetitorData[] result = new CompetitorData[2]; //this will contain the first and second place
     try
     {
         if (championship != null)
         {
             int playerA_index = 0, playerB_index = 1;
             while (championship.Count > 1) //Always the last player is the winner
             {
                 if (playerB_index >= championship.Count)
                 {
                     //The last playerB was the last in the list
                     //The indexes now point the first elementsin the list and runs the second round
                     playerA_index = 0;
                     playerB_index = 1;
                 }
                 CompetitorData playerA = championship[playerA_index++],
                                playerB = championship[playerB_index++];
                 bool playerAWins       = rules.GetRuleResult(playerA.Strategy, playerB.Strategy);
                 if (playerAWins) //player A wins
                 {
                     championship.Remove(playerB);
                 }
                 else //player B wins
                 {
                     championship.Remove(playerA);
                 }
                 if (championship.Count == 1) //The championship has ended up
                 {
                     SetWinners(result, playerAWins, playerA, playerB);
                 }
             }
         }
     }
     catch
     {
         throw;
     }
     return(result);
 }
예제 #11
0
        private Task UpdateDailyScanTime()
        {
            var dailyUpdate = GetDailyGamingList().ContinueWith(t =>
            {
                var competitorsPlayingToday = t.Result;

                foreach (var competitorPlayingToday in competitorsPlayingToday)
                {
                    CompetitorData competitorData = null;

                    if (_competitors.TryGetValue(competitorPlayingToday.Link, out competitorData))
                    {
                        if (competitorData.NextScan == null ||
                            competitorData.NextScan.Time < competitorPlayingToday.NextScan.Time)
                        {
                            competitorData.NextScan = competitorPlayingToday.NextScan;
                        }
                    }
                }
            });

            return(dailyUpdate);
        }
예제 #12
0
        private CPlayerUpdate ParsePlayerCareerInSquadByCompetition(CompetitorData competitorData, KeyValuePair <string, KeyValuePair <string, string> > season,
                                                                    HtmlNode dataRow, ScanType scanType, out string link, string chosenLeague = null)
        {
            var ath = CreateUpdateAthleteObject();

            var infoRow = dataRow.ChildNodes.Where(rp => rp.Name == "td").ToArray();

            var rawLink = dataRow.SelectSingleNode(dataRow.XPath + "//td[contains(@class,'name large-link')]/a/.");

            link = rawLink != null?rawLink.GetAttributeValue("href", "") : null;

            var cr = ParseFunctions.ParseCareerRecord(infoRow);

            if (cr != null)
            {
                ath.Name = ParseFunctions.ParseValue(dataRow, dataRow.XPath + "//td[contains(@class,'name')]/a/.");
                var rawJersey = ParseFunctions.ParseValue(dataRow,
                                                          dataRow.XPath + "//td[contains(@class,'shirtnumber')]/.");

                var jersey = -1;
                if (int.TryParse(rawJersey, out jersey))
                {
                    ath.JerseyNum = jersey;
                }

                var rawAge = ParseFunctions.ParseValue(dataRow, dataRow.XPath + "//td[contains(@class,'age')]/.");

                var age = -1;
                if (int.TryParse(rawAge, out age))
                {
                    ath.DOB = new DateTime(DateTime.Today.AddYears(-1 * age).Year, 1, 1);
                }

                var rawPosition = dataRow.SelectSingleNode(dataRow.XPath + "//td[contains(@class,'position')]/span/.");

                var position = -1;
                if (rawPosition != null)
                {
                    var strPosition = rawPosition.GetAttributeValue("title", "");

                    if (!string.IsNullOrEmpty(strPosition))
                    {
                        position = ParseFunctions.ParsePosition(strPosition);
                    }
                }

                var rawNationalityContainer =
                    dataRow.SelectSingleNode(dataRow.XPath + "//td[contains(@class,'flag')]/span/.");

                var rawNationality = rawNationalityContainer.GetAttributeValue("class", "");

                if (rawNationality != null)
                {
                    var m = _nationalityRgx.Match(rawNationality);
                    if (m.Success)
                    {
                        ath.Nationality = m.Groups["cntry"].Value.Trim();
                    }
                }

                if (scanType != ScanType.DailyGames && competitorData.CompetitionData == null)
                {
                    return(null);
                }

                var currentCompetition = scanType == ScanType.DailyGames
                    ? competitorData.NextScan.CompetitionData.Name
                    : competitorData.CompetitionData.Name;

                var currentCompetitionCountry = scanType == ScanType.DailyGames
                    ? competitorData.NextScan.CompetitionData.Country
                    : competitorData.CompetitionData.Country;

                if (string.IsNullOrEmpty(chosenLeague))
                {
                    ath.Competition = competitorData.CompetitionData == null
                        ? currentCompetition
                        : competitorData.CompetitionData.Name;
                }
                else
                {
                    ath.Competition = chosenLeague;
                }
                ath.Country    = competitorData.CompetitionData == null ? currentCompetitionCountry : competitorData.CompetitionData.Country;
                ath.Competitor = competitorData.Name;
                ath.Position   = position;

                string statisticsCompetition = season.Key;
                string statisticsCountry     = currentCompetition == season.Key ? currentCompetitionCountry : season.Key;

                var athleteStatisticsUpdate = new CAthleteStatisticsUpdate(cr)
                {
                    Season      = new ParsableValue <int>(season.Value.Value),
                    Country     = new ParsableValue <int>(statisticsCountry),
                    Competition = new ParsableValue <string>("A")
                };

                ath.Statistics = new List <CAthleteStatisticsUpdate>()
                {
                    athleteStatisticsUpdate
                };
            }

            return(ath);
        }
예제 #13
0
        private async Task <Dictionary <string, CPlayerUpdate> > ScanSingleCompetitor(CompetitorData competitorData,
                                                                                      ScanType scanType)
        {
            var list = new Dictionary <string, CPlayerUpdate>();

            try
            {
                var requestTime = DateTime.UtcNow;
                var fetchResult = await _innerPageParser.GetCompetitorPlayerStatBlock(competitorData.Id);

                var responseTime   = DateTime.UtcNow;
                var defaultRawData = fetchResult.HtmlDocument;

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

                string chosenLeague = string.Empty;
                var    seasonDic    =
                    ParseFunctions.ParseSeasonsSelect(defaultRawData.DocumentNode.SelectNodes("//select/optgroup/."), out chosenLeague);
                if (seasonDic == null)
                {
                    return(null);
                }

                var rawData = defaultRawData;
                if (scanType == ScanType.DailyGames &&
                    seasonDic.ContainsKey(competitorData.NextScan.CompetitionData.Name))
                {
                    requestTime = DateTime.UtcNow;
                    fetchResult =
                        await
                        _innerPageParser.GetCompetitorPlayerStatBlock(competitorData.Id,
                                                                      seasonDic[competitorData.NextScan.CompetitionData.Name].Key);

                    responseTime = DateTime.UtcNow;

                    rawData = fetchResult.HtmlDocument;
                    if (rawData == null)
                    {
                        return(null);
                    }
                }

                var table = rawData.DocumentNode.SelectSingleNode("//table[contains(@class,table)]");
                if (table == null)
                {
                    return(null);
                }

                var seasonId = table.GetAttributeValue("data-season_id", "");

                var season = seasonDic.FirstOrDefault(x => x.Value.Key == seasonId);

                var coachesNodes = defaultRawData.DocumentNode.SelectNodes("//table[@class='table squad']//tbody//tr//td[@class='name large-link']/a");

                if (coachesNodes != null)
                {
                    foreach (var coachNode in coachesNodes)
                    {
                        string coachPageLink = GetCoachPageLink(coachNode);

                        if (!string.IsNullOrWhiteSpace(coachPageLink))
                        {
                            FetchResult coachFetchResult = await _innerPageParser.GetCochCardBlock(coachPageLink);

                            HtmlDocument coachPageDoc = coachFetchResult.HtmlDocument;

                            string   nationality;
                            string   coachFullName;
                            DateTime?bornDate;
                            ParseCoachPersonalDetails(coachPageDoc, out nationality, out bornDate, out coachFullName);

                            CPlayerUpdate coachUpdate = GetCoachUpdate(competitorData, nationality, coachFullName, bornDate);

                            if (coachUpdate != null)
                            {
                                list.Add(coachPageLink, coachUpdate);
                            }
                        }
                    }
                }


                var dataRows = rawData.DocumentNode.SelectNodes("//tbody/tr");
                if (dataRows == null)
                {
                    return(null);
                }

                var index = 1;

                foreach (var row in dataRows)
                {
                    try
                    {
                        string link           = null;
                        var    cAthleteUpdate = ParsePlayerCareerInSquadByCompetition(competitorData, season, row,
                                                                                      scanType, out link, chosenLeague);
                        if (cAthleteUpdate != null)
                        {
                            if (string.IsNullOrEmpty(link))
                            {
                                link = index.ToString();
                                index++;
                            }

                            if (!list.ContainsKey(link))
                            {
                                var currentCompetition = scanType == ScanType.DailyGames && competitorData.NextScan != null
                                    ? competitorData.NextScan.CompetitionData : competitorData.CompetitionData;
                                cAthleteUpdate.WebRequestTime  = requestTime;
                                cAthleteUpdate.WebResponseTime = responseTime;
                                cAthleteUpdate.UsedProxy       = fetchResult.UsedProxy;
                                list.Add(link, cAthleteUpdate);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                    }
                }
            }
            catch (Exception exception)
            {
            }

            return(list);
        }
 private void ChangeJumperState(CompetitorData item, bool value)
 {
     item.registered = value;
 }