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); }
public CompetitorData(CompetitorData comp) { Id = comp.Id; Name = comp.Name; Link = comp.Link; CompetitionData = new CompetitionData(comp.CompetitionData); }
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); }
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 })); }
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); }
/// <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; } }
/// <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); }
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); }
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); }
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; }