private void EnsureBetMultiplier(SpinMessage message, string coinsMultiplier)
 {
     if (string.IsNullOrEmpty(coinsMultiplier) ||
         message.Multiplier < 1 ||
         !coinsMultiplier.Split(';').Select(int.Parse).ToList().Any(s => s == message.Multiplier))
     {
         message.Multiplier = 1;
     }
 }
        public async Task <Result <RequestContext <SpinArgs>, ErrorCode> > Build(SpinMessage message)
        {
            var buildRequest = await RequestContextBuilder.Build <SpinArgs>(userService, gameService, cachedSettings, httpContextAccessor, message.Key, message.Game);

            if (buildRequest.IsError)
            {
                return(buildRequest.Error);
            }

            var request = buildRequest.Value;

            var gameState = await userService.GetGameState(request);

            if (gameState.Type == GameStateType.SlotStateBonus)
            {
                return(ErrorCode.IncorrectState);
            }
            request.LastGameState = gameState;

            if (message.Bet < 0m)
            {
                return(ErrorCode.IncorrectBet);
            }

            if (!request.GameSetting.CoinsDenomination
                .Split(';')
                .Select(decimal.Parse).ToList().Any(s => s == message.Bet))
            {
                return(ErrorCode.IncorrectBet);
            }

            EnsureBetMultiplier(message, request.GameSetting.CoinsMultiplier);

            if (message.SideBet && !request.Game.IsSideBet)
            {
                return(ErrorCode.WrongParameter);
            }
            request.Query.TryGetInt32("cheat", out int cheat);
            var args = new SpinArgs
            {
                LineBet        = message.Bet,
                SideBet        = message.SideBet,
                FunPlayDemoKey = cheat,
                IsAutoSpin     = false,
                BettingLines   = 0,
                Multiplier     = message.Multiplier
            };

            request.Parameters = args;

            return(request);
        }
Пример #3
0
        public async Task <Result <IGameResult, ErrorCode> > Spin([FromQuery] SpinMessage message)
        {
            var session = await userService.GetUserSession(message.Key);

            if (session == null)
            {
                return(SessionExpired);
            }
            var userKey = GetUserKeyFromSession(session);
            var result  = await LockAsync(userKey, async() =>
            {
                var request = await spinRequestBuilder.Build(message);
                if (request.IsError)
                {
                    return(request.Error);
                }
                var x = await gameService.Spin(request.Value);
                return(x);
            });

            return(result);
        }