コード例 #1
0
        /* Проверяем, если лошади добавлены из одной скачки */
        private void CheckSameEvent(JToken outcomesIds)
        {
            using (Logger.BeginScope(LoggerHelper.GetCaller()))
            {
                var sameEvent  = string.Empty;
                var seenIds    = new List <long>();
                var horsesInfo = new List <HorseInfo>();
                foreach (long outcomeId in outcomesIds.Select(outcomeId => outcomeId.First()))
                {
                    var horse = (HorseInfo)CurrentBetslip.GetSelectionByKey(outcomeId).Data;
                    horsesInfo.Add(horse);
                }

                var eventIds = horsesInfo.Select(horse => horse.Race.Id) ?? new List <long>();
                foreach (long id in eventIds)
                {
                    var sameIds = eventIds.Where(eventId => eventId == id && !seenIds.Contains(id));
                    if (sameIds.Count() > 1)
                    {
                        var names = horsesInfo.Where(horse => horse.Race.Id == id).Select(horse => horse.Name);
                        sameEvent += "The same event: " + string.Join(" & ", names) + "\n";
                        seenIds.Add(id);
                    }
                }
                if (!string.IsNullOrEmpty(sameEvent))
                {
                    throw new Exception(sameEvent);
                }
            }
        }
コード例 #2
0
        /* Проверяем response после сделанной ставки(place bet) */
        protected void ManagePlaceResult(Bet bet, JToken placeResult)
        {
            using (Logger.BeginScope(LoggerHelper.GetCaller()))
            {
                var responseCoupon = placeResult["responseCoupon"];
                var errors         = responseCoupon["generalErrors"];

                if (errors != null)
                {
                    IdentifyError(bet, errors);
                    return;
                }

                SetMatchedSingleOdds(responseCoupon);

                var historyCoupon = responseCoupon["historyCoupon"];
                var totalStake    = (int?)historyCoupon["stake"] ?? 0;
                var countStakes   = historyCoupon["systems"]?.First()["bets"]?.Count() ?? 0;
                var unitStake     = totalStake / countStakes;

                CurrentBetslip.Status = BetslipStatus.Placed;
                var betToPlace = CurrentBetslip.GetBetToPlace();
                CurrentBetslip.SetMatched(betToPlace, (double)unitStake / 1000, (double)totalStake / 1000, bet.EW);
            }
        }
コード例 #3
0
        protected Bet GetBetToPlace()
        {
            var bet = CurrentBetslip.GetBetToPlace();

            if (bet == null)
            {
                throw new Exception("No bets to place");
            }
            return(bet);
        }
コード例 #4
0
 /* Обновляем коэффициент при ошибке "VET_ODDS_CHANGED" */
 private void UpdateOdds(Bet bet, int newOdds)
 {
     using (Logger.BeginScope(LoggerHelper.GetCaller()))
     {
         var selection = CurrentBetslip.GetSelectionByKey(bet.Key);
         var horseInfo = (HorseInfo)selection.Data;
         horseInfo.Odds = newOdds / 1000;
         horseInfo.SelectedOutcomeJData["approvedOdds"] = newOdds;
         CurrentBetslip.UpdateSelection(selection.Key, (double)newOdds / 1000, selection.Stake, selection.EW, horseInfo);
     }
 }
コード例 #5
0
 private void SetMatchedSingleOdds(JToken responseCoupon)
 {
     using (Logger.BeginScope(LoggerHelper.GetCaller()))
     {
         var historyCoupon = responseCoupon["historyCoupon"];
         foreach (var system in historyCoupon["systems"])
         {
             var betOutcomes = system["betOutcomes"];
             for (int i = 0; i < betOutcomes?.Count(); i++)
             {
                 var id        = (long)betOutcomes[i]["id"];
                 var odds      = (int)betOutcomes[i]["playedOdds"];
                 var selection = CurrentBetslip.GetSelectionByKey(id);
                 CurrentBetslip.SetMatchedOdds(selection, (double)odds / 1000);
             }
         }
     }
 }
コード例 #6
0
        /* Добавляем возможные ставки */
        private void GenerateMultiple()
        {
            var count   = CurrentBetslip.Selections.Count();
            var allowed = FillBetTypes(count);

            Logger.LogInformation($"allow {allowed.Count()} types");

            CurrentBetslip.StartUpdateMultiples();
            allowed.ForEach(type =>
            {
                CurrentBetslip.UpdateMultipleBet(
                    betType: type,
                    key: type,
                    data: CurrentBetslip.Selections
                    .Select(item => (HorseInfo)item.Data)
                    .OrderBy(item => item.Id)
                    );
            });
            CurrentBetslip.EndUpdateMultiples();
        }
コード例 #7
0
        /* Проверяем результат валидации coupon-а на ошибки
         *  "betErrors": [
         *      {"betIndex": 0,
         *          "errors": [{"type": "VET_INVALID_BET"}]
         *          }],
         *      "outcomeErrors": [
         *          {"outcomeId": 2699153202,
         *           "outcomeIds": [2699153202],
         *           "errors": [
         *                {"type": "VET_ODDS_CHANGED",
         *                 "arguments": ["6000"]}
         *    ]}]*/
        protected void ManageValidateResult(Bet bet, JToken responseCheckCoupon)
        {
            using (Logger.BeginScope(LoggerHelper.GetCaller()))
            {
                var outcomeErrors = responseCheckCoupon["outcomeErrors"];
                if (outcomeErrors != null)
                {
                    for (var i = 0; i < outcomeErrors.Count(); i++)
                    {
                        var id       = (long)outcomeErrors[i]["outcomeId"];
                        var betError = CurrentBetslip.GetSelectionByKey(id);

                        IdentifyError(betError, outcomeErrors[i]["errors"]);
                    }
                }
                if (bet.BetType.Code != BetTypeCode.Single)
                {
                    bet.AddError(BetError.Unexpected);
                }
                CheckSameEvent(responseCheckCoupon["requestCoupon"]?["outcomeIds"]);
            }
        }