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); }
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); }