Ejemplo n.º 1
0
        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));
            }
            ///////////
        }
Ejemplo n.º 2
0
        private void HandleConversion(ConversionModel conversion)
        {
            var watch = Stopwatch.StartNew();

            conversion.TimeStamp = DateTime.Now;

            _logger.LogInformation($"Received new conversion {conversion.ToJson()}");
            UserModel user = new UserModel {
                UserId = conversion.UserId, GamingSystemId = conversion.GamingSystemId, ProductId = conversion.ProductId
            };
            DailyDealEligibilityModel eligibility = _eligibilityRepository.Get(user).Result;

            if (eligibility != null)
            {
                if (eligibility.HasOffers())
                {
                    OfferModel offer = eligibility.OfferList.FirstOrDefault(o => o.IsClaimed == false);
                    eligibility.OfferList.Remove(offer);

                    offer.IsClaimed     = true;
                    offer.ClaimDateTime = DateTime.Now;
                    eligibility.OfferList.Add(offer);

                    var lowBalance = new LowBalanceEventMessage(conversion, offer);

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

                    if (transaction.IsValid())
                    {
                        _eligibilityRepository.Update(eligibility);
                        PubishTransction(new TransactionMessage.Insession(transaction));

                        Context.System.Scheduler.ScheduleTellOnce(TimeSpan.FromSeconds(60), Self, lowBalance, Self);
                    }
                    else
                    {
                        _logger.LogError($"Invalid transaction for {conversion.GamingSystemId}-{conversion.ProductId}-{conversion.UserId}. Terminating...");
                    }
                    ///////////
                }
                else
                {
                    _logger.LogWarning($"User {user.ToJson()} has no offers left.");
                    /////////Block
                    var    transaction  = _eligibilityBlockRepository.Get(INSESSION_TRANSACTION_NAME, $"{eligibility.GamingSystemId}-{eligibility.ProductId}-{eligibility.UserId}").Result;
                    IBlock lastBlock    = transaction.GetLastBlock();
                    IBlock currentBlock = new Block(lastBlock.Index, "Offers_Used_v1", "", watch.Elapsed, lastBlock.Hash);
                    transaction.Add(currentBlock);

                    if (transaction.IsValid())
                    {
                        _eligibilityRepository.Update(eligibility);
                        PubishTransction(new TransactionMessage.Insession(transaction));
                    }
                    ///////////
                }
            }
            else
            {
                _logger.LogWarning($"Plyer has no eligibility:: {user.ToJson()}");
            }
        }