コード例 #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="SportEventStatusDTO"/> class.
        /// </summary>
        /// <param name="restSES">A <see cref="restSportEventStatus" /> instance containing status data about the associated sport event</param>
        /// <param name="statistics"></param>
        /// <param name="homeAwayCompetitors"></param>
        public SportEventStatusDTO(restSportEventStatus restSES, matchStatistics statistics, IDictionary <HomeAway, URN> homeAwayCompetitors)
        {
            Guard.Argument(restSES, nameof(restSES)).NotNull();

            _homeAwayCompetitors = homeAwayCompetitors;

            var tempProperties = new Dictionary <string, object>();

            if (restSES.clock != null)
            {
                var i = 0;
                foreach (var clock in restSES.clock)
                {
                    i++;
                    ApplyPropertyValue(true, $"Clock{i}_MatchTime", clock.match_time, tempProperties);
                    ApplyPropertyValue(true, $"Clock{i}_StoppageTime", clock.stoppage_time, tempProperties);
                    ApplyPropertyValue(true, $"Clock{i}_StoppageTimeAnnounced", clock.stoppage_time_announced, tempProperties);
                }
            }
            ApplyPropertyValue(restSES.periodSpecified, "Period", restSES.period, tempProperties);
            if (restSES.period_scores != null && restSES.period_scores.Any())
            {
                var periodScores = new List <PeriodScoreDTO>();
                foreach (var periodScore in restSES.period_scores)
                {
                    periodScores.Add(new PeriodScoreDTO(periodScore));
                    if (periodScore.numberSpecified)
                    {
                        ApplyPropertyValue(periodScore.numberSpecified, $"PeriodScore{periodScore.number}_Number", periodScore.number, tempProperties);
                    }
                    ApplyPropertyValue(true, $"PeriodScore{periodScore.number}_HomeScore", periodScore.home_score, tempProperties);
                    ApplyPropertyValue(true, $"PeriodScore{periodScore.number}_AwayScore", periodScore.away_score, tempProperties);
                    ApplyPropertyValue(true, $"PeriodScore{periodScore.number}_Type", periodScore.type, tempProperties);
                }
                PeriodScores = periodScores;
            }
            ApplyPropertyValue(!string.IsNullOrEmpty(restSES.winner_id), "WinnerId", restSES.winner_id, tempProperties);
            ApplyPropertyValue(!string.IsNullOrEmpty(restSES.winning_reason), "WinningReason", restSES.winning_reason, tempProperties);
            ApplyPropertyValue(!string.IsNullOrEmpty(restSES.aggregate_home_score), "AggregateHomeScore", restSES.aggregate_home_score, tempProperties);
            ApplyPropertyValue(!string.IsNullOrEmpty(restSES.aggregate_away_score), "AggregateAwayScore", restSES.aggregate_away_score, tempProperties);
            ApplyPropertyValue(!string.IsNullOrEmpty(restSES.aggregate_winner_id), "AggregateWinnerId", restSES.aggregate_winner_id, tempProperties);
            ApplyPropertyValue(!string.IsNullOrEmpty(restSES.home_score), "HomeScore", restSES.home_score, tempProperties); // BELOW
            ApplyPropertyValue(!string.IsNullOrEmpty(restSES.away_score), "AwayScore", restSES.away_score, tempProperties); // BELOW

            Properties = new ReadOnlyDictionary <string, object>(tempProperties);

            int statusId;

            Status = restSES.status_codeSpecified
                         ? MessageMapperHelper.GetEnumValue(restSES.status_code, EventStatus.Unknown)
                         : int.TryParse(restSES.status, out statusId)
                             ? MessageMapperHelper.GetEnumValue(statusId, EventStatus.Unknown)
                             : MessageMapperHelper.GetEnumValue(restSES.status, EventStatus.Unknown);
            ApplyPropertyValue(true, "Status", (int)Status, tempProperties);     //BELOW

            //IsReported = ses.reportingSpecified
            //    ? (int?)ses.reporting
            //    : null;

            HomeScore = decimal.TryParse(restSES.home_score, NumberStyles.AllowDecimalPoint, NumberFormatInfo.InvariantInfo, out var homeScore)
                            ? (decimal?)homeScore
                            : null;

            AwayScore = decimal.TryParse(restSES.away_score, NumberStyles.AllowDecimalPoint, NumberFormatInfo.InvariantInfo, out var awayScore)
                            ? (decimal?)awayScore
                            : null;

            var matchStatusId = -1;

            if (restSES.match_status_codeSpecified)
            {
                matchStatusId = restSES.match_status_code;
                ApplyPropertyValue(true, MATCH_STATUS, matchStatusId, tempProperties);
            }
            if (matchStatusId < 0 && !string.IsNullOrEmpty(restSES.match_status))
            {
                //TODO: status here is received as "2nd_set", not even like descriptions on API (there are no "_" between words)
                if (int.TryParse(restSES.match_status, out matchStatusId))
                {
                    ApplyPropertyValue(true, MATCH_STATUS, matchStatusId, tempProperties);
                }
                else if (restSES.match_status.Equals("not_started", StringComparison.InvariantCultureIgnoreCase))
                {
                    matchStatusId = 0;
                    ApplyPropertyValue(true, MATCH_STATUS, matchStatusId, tempProperties);
                }
                else
                {
                    //ignored
                }
            }
            MatchStatusId = matchStatusId;

            if (!string.IsNullOrEmpty(restSES.winner_id))
            {
                WinnerId = URN.Parse(restSES.winner_id);
            }

            PeriodOfLadder = null;

            ReportingStatus = ReportingStatus.Unknown;

            EventClock = null;

            EventResults = null;
            if (restSES.results != null)
            {
                var eventResults = new List <EventResultDTO>();
                foreach (var result in restSES.results)
                {
                    eventResults.Add(new EventResultDTO(result));
                }
                EventResults = eventResults;
            }

            if (statistics != null)
            {
                SportEventStatistics = new SportEventStatisticsDTO(statistics, _homeAwayCompetitors);
            }

            DecidedByFed = restSES.decided_by_fedSpecified ? restSES.decided_by_fed : (bool?)null;

            // load home and away penalty score from the penalty period score
            if (HomePenaltyScore == null && AwayPenaltyScore == null && PeriodScores != null && PeriodScores.Any())
            {
                try
                {
                    foreach (var periodScoreDTO in PeriodScores)
                    {
                        if (periodScoreDTO.Type.HasValue && periodScoreDTO.Type.Value == PeriodType.Penalties)
                        {
                            HomePenaltyScore = (int)periodScoreDTO.HomeScore;
                            AwayPenaltyScore = (int)periodScoreDTO.AwayScore;
                        }
                    }
                }
                catch (Exception)
                {
                    //ignored
                }
            }
        }
コード例 #2
0
        /// <summary>
        ///     Initializes a new instance of the <see cref="SportEventStatusDTO" /> class.
        /// </summary>
        /// <param name="record">
        ///     A <see cref="restSportEventStatus" /> instance containing status data about the associated sport
        ///     event
        /// </param>
        /// <param name="statistics"></param>
        /// <param name="homeAwayCompetitors"></param>
        public SportEventStatusDTO(restSportEventStatus record, matchStatistics statistics,
                                   IDictionary <HomeAway, URN> homeAwayCompetitors)
        {
            Contract.Requires(record != null);

            _homeAwayCompetitors = homeAwayCompetitors;

            var tempProperties = new Dictionary <string, object>();

            if (record.clock != null)
            {
                var i = 0;
                foreach (var clock in record.clock)
                {
                    i++;
                    ApplyPropertyValue(true, $"Clock{i}_MatchTime", clock.match_time, tempProperties);
                    ApplyPropertyValue(true, $"Clock{i}_StoppageTime", clock.stoppage_time, tempProperties);
                    ApplyPropertyValue(true, $"Clock{i}_StoppageTimeAnnounced", clock.stoppage_time_announced,
                                       tempProperties);
                }
            }

            ApplyPropertyValue(record.periodSpecified, "Period", record.period, tempProperties);
            if (record.period_scores != null && record.period_scores.Any())
            {
                var periodScores = new List <PeriodScoreDTO>();
                foreach (var periodScore in record.period_scores)
                {
                    periodScores.Add(new PeriodScoreDTO(periodScore));
                    if (periodScore.numberSpecified)
                    {
                        ApplyPropertyValue(periodScore.numberSpecified, $"PeriodScore{periodScore.number}_Number",
                                           periodScore.number, tempProperties);
                    }
                    ApplyPropertyValue(true, $"PeriodScore{periodScore.number}_HomeScore", periodScore.home_score,
                                       tempProperties);
                    ApplyPropertyValue(true, $"PeriodScore{periodScore.number}_AwayScore", periodScore.away_score,
                                       tempProperties);
                    ApplyPropertyValue(true, $"PeriodScore{periodScore.number}_Type", periodScore.type, tempProperties);
                }

                PeriodScores = periodScores;
            }

            ApplyPropertyValue(true, "WinnerId", record.winner_id, tempProperties);
            ApplyPropertyValue(true, "WinningReason", record.winning_reason, tempProperties);
            ApplyPropertyValue(record.aggregate_away_scoreSpecified, "AggregateAwayScore", record.aggregate_away_score,
                               tempProperties);
            ApplyPropertyValue(record.aggregate_home_scoreSpecified, "AggregateHomeScore", record.aggregate_home_score,
                               tempProperties);
            ApplyPropertyValue(true, "AggregateWinnerId", record.aggregate_winner_id, tempProperties);
            ApplyPropertyValue(record.away_scoreSpecified, "AwayScore", record.away_score, tempProperties); // BELOW
            ApplyPropertyValue(record.home_scoreSpecified, "HomeScore", record.home_score, tempProperties); // BELOW

            Properties = new ReadOnlyDictionary <string, object>(tempProperties);

            int statusId;

            Status = record.status_codeSpecified
                ? MessageMapperHelper.GetEnumValue(record.status_code, EventStatus.Unknown)
                : int.TryParse(record.status, out statusId)
                    ? MessageMapperHelper.GetEnumValue(statusId, EventStatus.Unknown)
                    : MessageMapperHelper.GetEnumValue(record.status, EventStatus.Unknown);
            ApplyPropertyValue(true, "Status", (int)Status, tempProperties);  //BELOW

            //IsReported = record.reportingSpecified
            //    ? (int?)record.reporting
            //    : null;

            HomeScore = record.home_scoreSpecified
                ? (decimal?)record.home_score
                : null;

            AwayScore = record.away_scoreSpecified
                ? (decimal?)record.away_score
                : null;

            var matchStatusId = -1;

            if (record.match_status_codeSpecified)
            {
                matchStatusId = record.match_status_code;
                ApplyPropertyValue(true, MATCH_STATUS, matchStatusId, tempProperties);
            }

            if (matchStatusId < 0 && !string.IsNullOrEmpty(record.match_status))
            {
                //TODO: status here is received as "2nd_set", not even like descriptions on API (there are no "_" between words)
                if (int.TryParse(record.match_status, out matchStatusId))
                {
                    ApplyPropertyValue(true, MATCH_STATUS, matchStatusId, tempProperties);
                }
                else if (record.match_status.Equals("not_started", StringComparison.InvariantCultureIgnoreCase))
                {
                    matchStatusId = 0;
                    ApplyPropertyValue(true, MATCH_STATUS, matchStatusId, tempProperties);
                }
            }

            MatchStatusId = matchStatusId;

            if (!string.IsNullOrEmpty(record.winner_id))
            {
                WinnerId = URN.Parse(record.winner_id);
            }

            ReportingStatus = ReportingStatus.Unknown;

            EventClock = null;

            EventResults = null;

            if (statistics != null)
            {
                SportEventStatistics = new SportEventStatisticsDTO(statistics, _homeAwayCompetitors);
            }
        }