private void HandleLowBalance(LowBalanceEventMessage lowBalance)
        {
            var watch = Stopwatch.StartNew();
            var match = lowBalance.Offer.Percentage * lowBalance.Conversion.Amount;
            InsessionEligibility eligibility = new InsessionEligibility
            {
                CreditAmount   = match,
                OfferId        = lowBalance.Offer.OfferId.ToString(),
                GamingSystemId = lowBalance.Conversion.GamingSystemId,
                ProductId      = lowBalance.Conversion.ProductId,
                UserId         = lowBalance.Conversion.UserId
            };

            ExperienceResult experience = new ExperienceResult
            {
                Experience = "BadMarginGoodBetSize",
                MatchOffer = $"{match}"
            };

            PlayerExperienceBlockData blockData = new PlayerExperienceBlockData(experience, eligibility);

            /////////Block
            var    transaction  = _experienceBlockRepository.Get(INSESSION_TRANSACTION_NAME, $"{eligibility.GamingSystemId}-{eligibility.ProductId}-{eligibility.UserId}").Result;
            IBlock lastBlock    = transaction.GetLastBlock();
            IBlock currentBlock = new Block(lastBlock.Index, "Experience_Calculated_v1", blockData.ToJson(), watch.Elapsed, lastBlock.Hash);

            transaction.Add(currentBlock);

            if (transaction.IsValid())
            {
                PubishInsessionEligibility(eligibility);
                PubishTransction(new TransactionMessage.Insession(transaction));
            }
            ///////////
        }
        private void HandleEligibility(InsessionEligibility eligibility)
        {
            var watch = Stopwatch.StartNew();

            _logger.LogInformation($"Eligibility Received for crediting: {eligibility.ToJson()}");
            _logger.LogInformation($"Player {eligibility.GamingSystemId}-{eligibility.ProductId}-{eligibility.UserId} has been credited with {eligibility.CreditAmount} for offer {eligibility.OfferId}");

            CreditModel blockData = new CreditModel(eligibility, true);

            /////////Block
            var    transaction  = _creditBlockRepository.Get(INSESSION_TRANSACTION_NAME, $"{eligibility.GamingSystemId}-{eligibility.ProductId}-{eligibility.UserId}").Result;
            IBlock lastBlock    = transaction.GetLastBlock();
            IBlock currentBlock = new Block(lastBlock.Index, "Player_Credited_v1", blockData.ToJson(), watch.Elapsed, lastBlock.Hash);

            transaction.Add(currentBlock);

            if (transaction.IsValid())
            {
                var conversion = new ConversionModel()
                {
                    Amount         = 500,
                    GamingSystemId = eligibility.GamingSystemId,
                    ProductId      = eligibility.ProductId,
                    UserId         = eligibility.UserId
                };

                PubishTransction(new TransactionMessage.Insession(transaction));
                Context.System.Scheduler.ScheduleTellOnce(TimeSpan.FromSeconds(60), Self, conversion, Self);
            }
            ///////////
        }
 public PlayerExperienceBlockData(ExperienceResult experienceResult, InsessionEligibility eligibility)
 {
     ExperienceResult     = experienceResult;
     InsessionEligibility = eligibility;
 }
 private void PubishInsessionEligibility(InsessionEligibility eligibility)
 {
     Context.System.Scheduler.ScheduleTellOnce(TimeSpan.FromSeconds(3), Self, eligibility, Self);
 }
示例#5
0
 public CreditModel(InsessionEligibility insessionEligibility, bool isSuccess)
 {
     IsSuccess   = isSuccess;
     Eligibility = insessionEligibility;
 }