public bool ProcessVisit(string visitKey, byte[] ups, byte[] hrs, int startIndex, int length, ref StringBuilder data)
        {
            string processGUID = GetAssignedProcess(visitKey);

            using (ChannelFactory <IPatternsProcessorMessages> factory = CreateChannelFactory(processGUID))
            {
                IPatternsProcessorMessages channel = factory.CreateChannel();
                try
                {
                    ResultsEngineResponse response = channel.EngineProcessData(visitKey, ups, hrs, startIndex, length);
                    if (response.ResponseCode != EngineResponseCode.Success)
                    {
                        throw new Exception(response.ErrorMessage);
                    }

                    data = response.ResultsData;
                    return(response.MoreData);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    CloseChannel((ICommunicationObject)channel);
                }
            }
        }
Ejemplo n.º 2
0
        public ResultsEngineResponse EngineProcessData(string visitKey, byte[] ups, byte[] hrs, int startIndex, int length)
        {
            ResultsEngineResponse toRet;

            try
            {
                PatternsProcessorSettings.Source.TraceEvent(TraceEventType.Verbose, 210, "PAW debug: Patterns Processor (PID={0}, GUID={1}): EngineProcessData: VisitKey: {2}",
                                                            PatternsProcessorSettings.Instance.ProcessId, PatternsProcessorSettings.Instance.ProcessGUID, visitKey);


                m_LastRequest = DateTime.Now;

                // Process the data AS IS
                int  buffer_size = 0;
                bool moreData    = false;

                // Simulate a limited seconds feed of 1 day of tracing at once maximum
                int time_frame = 86400;
                int position   = startIndex;
                int end        = startIndex + length;
                while (position < end)
                {
                    int block_size = Math.Min(time_frame, end - position);
                    buffer_size = Bridge.EngineProcessData(visitKey, ups, position, block_size, hrs, 4 * position, 4 * block_size);
                    position   += time_frame;
                }

                StringBuilder data;
                if (buffer_size > 0)
                {
                    data     = new StringBuilder(buffer_size);
                    moreData = Bridge.EngineReadResults(visitKey, ref data, buffer_size);
                }
                else
                {
                    data     = new StringBuilder();
                    moreData = false;
                }

                //PatternsProcessorSettings.Source.TraceEvent(TraceEventType.Verbose, 235, "Patterns Processor (PID={0}, GUID={1}): Tracings processed for visit {2}.",
                //   PatternsProcessorSettings.Instance.ProcessId, PatternsProcessorSettings.Instance.ProcessGUID, visitKey);

                toRet = new ResultsEngineResponse()
                {
                    ResultsData  = data,
                    MoreData     = moreData,
                    ResponseCode = EngineResponseCode.Success
                };
            }
            catch (Exception ex)
            {
                toRet = new ResultsEngineResponse()
                {
                    ResponseCode = EngineResponseCode.Error,
                    ErrorMessage = ex.ToString()
                };
            }

            return(toRet);
        }
Ejemplo n.º 3
0
        public ResultsEngineResponse Execute(ITeamResultEngineContext context, IRevertResultRequest request)
        {
            this._unitOfWork.GuardCheckInTransaction();

            var response   = new ResultsEngineResponse();
            var processors = this._processorFactory.Create(context, request);
            var status     = this._processorExecutor.Execute(context, request, response, processors);

            response.Status = status;

            return(response);
        }
        public Task <ResultsEngineResponse> Execute(ITeamResultEngineContext context, ISetMatchWalkoverRequest request)
        {
            this._unitOfWork.GuardCheckInTransaction();

            var response   = new ResultsEngineResponse();
            var processors = this._processorFactory.Create(context, request);
            var status     = this._processorExecutor.Execute(context, request, response, processors);

            response.Status = status;

            return(Task.FromResult(response));
        }
Ejemplo n.º 5
0
        private bool Validate(ITeamResultEngineContext context, ResultsEngineResponse response, ReadOnlyCollection <CompetitionPlayerGameStatistic> statistics, int playerID, BowlsResults.Common.Domain.Entities.Team team)
        {
            var ok        = true;
            var otherClub = statistics.FirstOrDefault(x => x.PlayerID == playerID && x.Team.Club.ID != team.Club.ID);

            if (otherClub != null)
            {
                var player = context.GetPreloadedPlayer(playerID);

                response.ValidationResult.Errors.Add(new ValidationFailure($"SingleClubPlayer{playerID}", $"{player.DisplayName} has already played for {otherClub.Team.Club.Name} in this competition."));
                ok = false;
            }

            return(ok);
        }
Ejemplo n.º 6
0
        private static bool Validate(ITeamResultEngineContext context, ResultsEngineResponse response, ReadOnlyCollection <CompetitionPlayerGameStatistic> statistics, int playerID, int teamID, int maxGamesBeforeTied)
        {
            bool ok = true;

            var grouping = statistics.Where(x => x.PlayerID == playerID && x.Team.ID != teamID).GroupBy(x => x.Team).FirstOrDefault(x => x.Count() >= maxGamesBeforeTied);

            if (grouping != null)
            {
                var player = context.GetPreloadedPlayer(playerID);

                response.ValidationResult.Errors.Add(new ValidationFailure($"CheckTiedToTeam{player.ID}",
                                                                           $"{player.DisplayName} has already played {maxGamesBeforeTied} or more games for {grouping.Key.Name} and is tied to that team for this competition."));
                ok = false;
            }

            return(ok);
        }
        private async Task <bool> Validate(ITeamResultEngineContext context, ResultsEngineResponse response, ReadOnlyCollection <CompetitionPlayerGameStatistic> statistics, List <int> competitionIDs, int maxGames, int playerID)
        {
            var ok = true;

            var grouping = statistics.Where(x => x.PlayerID == playerID && competitionIDs.Contains(x.CompetitionID)).GroupBy(x => x.CompetitionID).FirstOrDefault(x => x.Count() >= maxGames);

            if (grouping != null)
            {
                var relatedCompetition = await this._competitionRepository.Get(grouping.Key);

                var player = context.GetPreloadedPlayer(playerID);

                response.ValidationResult.Errors.Add(new ValidationFailure($"MaxGamesHigherComp{playerID}", $"{player.DisplayName} has already played {maxGames} or more games in {relatedCompetition.Name}, and is tied to that competition."));
                ok = false;
            }

            return(ok);
        }
Ejemplo n.º 8
0
        private bool Validate(ITeamResultEngineContext context, ResultsEngineResponse response, ReadOnlyCollection <CompetitionPlayerGameStatistic> statistics, IEnumerable <int> teamIDs, int maxGames, int playerID)
        {
            var ok = true;

            if (playerID > 0)
            {
                var grouping = statistics.Where(x => x.PlayerID == playerID && teamIDs.Contains(x.Team.ID)).GroupBy(x => x.Team).FirstOrDefault(x => x.Count() >= maxGames);

                //var grouping = statistics.Where(x => teamIDs.Contains(x.Team.ID)).GroupBy(x => x.Team).FirstOrDefault(x => x.Count() >= maxGames);
                if (grouping != null)
                {
                    var player = context.GetPreloadedPlayer(playerID);

                    response.ValidationResult.Errors.Add(new ValidationFailure($"MaxGamesTeamPerComp{playerID}",
                                                                               $"{player.DisplayName} has already played {maxGames} or more games for {grouping.Key.Name}, who are a higher ranked team in this competition."));
                    ok = false;
                }
            }

            return(ok);
        }
Ejemplo n.º 9
0
        public async Task <ResultsEngineStatuses> Process(ITeamResultEngineContext context, IGameResults request, ResultsEngineResponse response)
        {
            if (request.GameResults != null && request.GameResults.Count > 0)
            {
                var playerIDs = request.GameResults.SelectMany(x => x.AllPlayers).ToArray();
                await context.PreloadPlayers(playerIDs);

                ITeamMatchModel matchModel = await context.Fixture.GetMatch(request.MatchID);

                var competition = context.Competition;
                foreach (var gameResult in request.GameResults)
                {
                    if (matchModel.GameExists(gameResult.MatchFormatXGameVariationID))
                    {
                        await matchModel.UpdateGame(gameResult);
                    }
                    else
                    {
                        await matchModel.AddGame(gameResult);
                    }
                }
            }

            return(ResultsEngineStatuses.Success);
        }
        public async Task <ResultsEngineStatuses> Process(ITeamResultEngineContext context, IRevertResultRequest request, ResultsEngineResponse response)
        {
            var match = await context.Fixture.GetMatch(request.MatchID);

            var meritTable = await context.GetCompetitionPlayerMeritTable();

            var config = await this._meritCalculationEngineRepository.Get((byte)meritTable.MeritCalculationEngineID);

            foreach (var teamMatchXGame in match.Data.Games)
            {
                foreach (var playerGame in teamMatchXGame.Game.Players.Where(x => x.Player.IsRealPlayer()))
                {
                    var team = match.Data.GetTeamBySide(playerGame.SideID);

                    await this._playerMeritTableCalculationEngine.Remove(meritTable, playerGame, team, context.CompetitionEvent, config);
                }
            }

            //meritTable.MatchAdded(match.Data);

            return(ResultsEngineStatuses.Success);
        }
        public async Task <bool> IsSatisfiedBy(ITeamResultEngineContext context, IRevertResultRequest request, ResultsEngineResponse response)
        {
            if (request.UpdatePlayerCompetitionStatistics)
            {
                var match = await context.Fixture.GetMatch(request.MatchID);

                return(context.Competition.PlayerMeritTableCalculationEngineID.HasValue && match.IsMatchProcessedWithResult());
            }

            return(false);
        }
 public Task <bool> IsSatisfiedBy(ITeamResultEngineContext context, IResultsEngineRequest request, ResultsEngineResponse response)
 {
     return(Task.FromResult(true));
 }
Ejemplo n.º 13
0
        public async Task <ResultsEngineStatuses> Process(ITeamResultEngineContext context, IGameResults request, ResultsEngineResponse response)
        {
            var          ok   = true;
            RuleSetXRule rule = await context.GetRuleSpecification(Entities.Rule.Rules.CheckTiedToTeam);

            int maxGamesBeforeTied = rule.DataInt1.Value;

            ITeamMatchModel match = await context.Fixture.GetMatch(request.MatchID);

            var statistics = await context.GetCompetitionPlayerGameStatistic(request, match);

            var allPlayers = context.GetAllPlayersWithTeam(request, match);

            foreach (var(playerID, team) in allPlayers)
            {
                ok &= Validate(context, response, statistics, playerID, team.ID, maxGamesBeforeTied);
            }

            return(ResultEngineStatusMapper.MapFromBool(ok));
        }
        public async Task <ResultsEngineStatuses> Process(ITeamResultEngineContext context, IResultsEngineRequest request, ResultsEngineResponse response)
        {
            var status = ResultsEngineStatuses.Success;

            var pendingFixtures = await context.GetPendingFixtures();

            foreach (TeamFixture pendingFixture in pendingFixtures)
            {
                var updateRequest = UpdatePendingTeamFixtureRequest.New()
                                    .WithCompetitionID(pendingFixture.CompetitionID)
                                    .WithFixtureID(pendingFixture.ID)
                                    .WithCompetitionStageID(pendingFixture.CompetitionRound.CompetitionEvent.CompetitionStage.ID)
                                    .WithCompletedFixture(context.Fixture.Data)
                                    .Build();
                ITeamResultEngine engine = await this._teamResultEngineManager.GetEngine(updateRequest);

                var updateResponse = engine.UpdatePendingFixture(updateRequest);
                status = updateResponse.Status;
                if (status != ResultsEngineStatuses.Success)
                {
                    break;
                }
            }

            return(status);
        }
Ejemplo n.º 15
0
 public Task <ResultsEngineStatuses> Process(ITeamResultEngineContext context, IResultsEngineRequest request, ResultsEngineResponse response)
 {
     response.ValidationResult.Errors.Add(new ValidationFailure("MatchStatus", "Match must have a result to revert."));
     return(Task.FromResult(ResultsEngineStatuses.ValidationError));
 }
        public async Task <ResultsEngineStatuses> Process(ITeamResultEngineContext context, IRevertResultRequest request, ResultsEngineResponse response)
        {
            var matchModel = await context.Fixture.GetMatch(request.MatchID);

            await this._careerTeamGameStatisticService.Remove(matchModel.Data);

            return(ResultsEngineStatuses.Success);
        }
 public Task <bool> IsSatisfiedBy(ITeamResultEngineContext context, IRevertResultRequest request, ResultsEngineResponse response)
 {
     return(Task.FromResult(context.Fixture.IsMatchProcessedWithResult(request.MatchID)));
 }
Ejemplo n.º 18
0
        public async Task <ResultsEngineStatuses> Process(ITeamResultEngineContext context, IGameResults request, ResultsEngineResponse response)
        {
            var ok      = true;
            var ruleSet = await context.GetRuleSet();

            RuleSetXRule rule = await context.GetRuleSpecification(Entities.Rule.Rules.CheckMaximumGamesForHigherRankedTeamAnyCompetition);

            int maxGames = rule.DataInt1.Value;

            ITeamMatchModel match = await context.Fixture.GetMatch(request.MatchID);

            BowlsResults.Common.Domain.Entities.Team homeTeam = match.Data.Home;
            BowlsResults.Common.Domain.Entities.Team awayTeam = match.Data.Away;

            var statistics = await context.GetCompetitionPlayerGameStatistic(request, match);

            var teams = await this._competitionRepository.GetCompetitionTeams(ruleSet.Competitions.Select(x => x.CompetitionID).ToArray());

            foreach (var gameResult in request.GameResults)
            {
                IEnumerable <int> homeIDs = GetHigherRankedTeamIDs(teams, homeTeam);
                IEnumerable <int> awayIDs = GetHigherRankedTeamIDs(teams, awayTeam);

                foreach (var playerID in gameResult.HomePlayers)
                {
                    ok &= this.Validate(context, response, statistics, homeIDs, maxGames, playerID);
                }

                foreach (var playerID in gameResult.AwayPlayers)
                {
                    ok &= this.Validate(context, response, statistics, awayIDs, maxGames, playerID);
                }
            }

            return(ResultEngineStatusMapper.MapFromBool(ok));
        }
Ejemplo n.º 19
0
        public async Task <bool> IsSatisfiedBy(ITeamResultEngineContext context, IGameResults request, ResultsEngineResponse response)
        {
            RuleSetXRule rule = await context.GetRuleSpecification(Entities.Rule.Rules.CheckMaximumGamesForHigherRankedTeamAnyCompetition);

            return(rule != null);
        }
        public async Task <ResultsEngineStatuses> Process(ITeamResultEngineContext context, IResultsEngineRequest request, ResultsEngineResponse response)
        {
            await context.Fixture.CalculateFixture();

            return(ResultsEngineStatuses.Success);
        }
Ejemplo n.º 21
0
        public Task <bool> IsSatisfiedBy(ITeamResultEngineContext context, IGameResults request, ResultsEngineResponse response)
        {
            bool result = !context.Fixture.IsMatchProcessed(request.MatchID);

            return(Task.FromResult(result));
        }
        public async Task <bool> IsSatisfiedBy(ITeamResultEngineContext context, IGameResults request, ResultsEngineResponse response)
        {
            var match = await context.Fixture.GetMatch(request.MatchID);

            return(match.IsMatchProcessedWithResult() && request.UpdateCareerStatistics);
        }
Ejemplo n.º 23
0
        public async Task <ResultsEngineStatuses> Process(ITeamResultEngineContext context, IGameResults request, ResultsEngineResponse response)
        {
            if (request.GameResults != null && request.GameResults.Count > 0)
            {
                var match = await context.Fixture.GetMatch(request.MatchID);

                var validationContext = new ValidationContext <List <GameResult> >(request.GameResults);
                validationContext.RootContextData.Add("match", match.Data);
                validationContext.RootContextData.Add("gameCalculationEngineRepository", this._gameCalculationEngineRepository);

                var result = await this._gameResultsValidator.ValidateAsync(validationContext);

                response.SetValidationResult(result);
            }

            if (response.ValidationResult.IsValid)
            {
                return(ResultsEngineStatuses.Success);
            }

            return(ResultsEngineStatuses.ValidationError);
        }
        public async Task <bool> IsSatisfiedBy(IPlayerResultEngineContext context, IGameResults request, ResultsEngineResponse response)
        {
            if (context.PlayerFixture.IsComplete())
            {
                this._pendingFixtures = await this._playerFixtureRepository.GetPendingFixtures(context.PlayerFixture.Data.ID);

                return(this._pendingFixtures.Count > 0);
            }

            return(false);
        }
        public async Task <bool> IsSatisfiedBy(ITeamResultEngineContext context, IResultsEngineRequest request, ResultsEngineResponse response)
        {
            if (context.Fixture.Completed)
            {
                var pendingFixtures = await context.GetPendingFixtures();

                return(pendingFixtures.Count > 0);
            }

            return(false);
        }
        public Task <ResultsEngineStatuses> Process(IPlayerResultEngineContext context, IGameResults request, ResultsEngineResponse response)
        {
            var status = ResultsEngineStatuses.Success;

            foreach (PlayerFixture pendingFixture in this._pendingFixtures)
            {
                var updateRequest = UpdatePendingPlayerFixtureRequest.New()
                                    .WithCompetitionID(pendingFixture.CompetitionID)
                                    .WithFixtureID(pendingFixture.ID)
                                    .WithCompetitionStageID(pendingFixture.CompetitionRound.CompetitionEvent.CompetitionStage.ID)
                                    .WithCompletedFixture(context.PlayerFixture.Data)
                                    .Build();
                IPlayerResultEngine engine = this._playerResultEngineManager.GetEngine(updateRequest).GetAwaiter().GetResult();
                var updateResponse         = engine.UpdatePendingFixture(updateRequest);
                status = updateResponse.Status;
                if (status != ResultsEngineStatuses.Success)
                {
                    break;
                }
            }

            return(Task.FromResult(status));
        }
Ejemplo n.º 27
0
        public async Task <bool> IsSatisfiedBy(ITeamResultEngineContext context, IGameResults request, ResultsEngineResponse response)
        {
            RuleSetXRule rule = await context.GetRuleSpecification(Entities.Rule.Rules.CheckTiedToTeam);

            return(rule != null);
        }
        public async Task <ResultsEngineStatuses> Process(ITeamResultEngineContext context, ISetMatchWalkoverRequest request, ResultsEngineResponse response)
        {
            var match = await context.Fixture.GetMatch(request.MatchID);

            await match.SetWalkover(request);

            return(ResultsEngineStatuses.Success);
        }
        public async Task <bool> IsSatisfiedBy(ITeamResultEngineContext context, IRevertResultRequest request, ResultsEngineResponse response)
        {
            if (request.UpdatePlayerCompetitionStatistics)
            {
                var leagueEvent = context.CompetitionEvent as League;
                if (leagueEvent == null)
                {
                    throw new InvalidResultsEngineOperationException("Invalid type specified for loaded competition event");
                }

                var match = await context.Fixture.GetMatch(request.MatchID);

                return(leagueEvent.MeritCalculationEngineID.HasValue && match.IsMatchProcessedWithResult());
            }

            return(false);
        }
        public async Task <ResultsEngineStatuses> Process(ITeamResultEngineContext context, IGameResults request, ResultsEngineResponse response)
        {
            var matchModel = await context.Fixture.GetMatch(request.MatchID);

            foreach (var teamMatchXGame in matchModel.Data.Games)
            {
                foreach (var gameXPlayer in teamMatchXGame.Game.Players)
                {
                    var dto = new CareerPlayerStatisticData();
                    dto.CompetitionID      = context.Competition.ID;
                    dto.CompetitionStageID = matchModel.Data.TeamFixture.CompetitionRound.CompetitionEvent.CompetitionStage.ID;
                    dto.Game      = gameXPlayer;
                    dto.TeamMatch = matchModel.Data;
                    await this._careerPlayerStatisticService.Add(dto);
                }
            }

            return(ResultsEngineStatuses.Success);
        }