protected override State DoProcess() { Output.Inform("Deposit money you would like to play with:"); Result <decimal> result = Interaction.TryGetDecimal(); if (!result.IsSuccess) { Output.Warn(Messages.UnexpectedInputForSpecifyingDecimal); return(this); } else { CreateAmountResult createDepositResult = Amount.TryCreate(result.Value, out Amount deposit); if (!createDepositResult.IsSuccess || deposit == Amount.Zero) { Output.Warn($"Deposit should be in ({Amount.Zero}, {Amount.Max}) {Wallet.Currency}."); return(this); } else { Wallet.Deposit(deposit); Logger.LogInformation("Deposited {0} {1}.", Wallet.Balance, Wallet.Currency); Output.Inform($"You deposited {Wallet.Balance} {Wallet.Currency}."); return(States.StakeOrWithdraw); } } }
protected override State DoProcess() { Output.Inform($"Current balance is {Wallet.Balance} {Wallet.Currency}."); Output.Inform("Stake money for the next spin:"); Result <decimal> result = Interaction.TryGetDecimal(); if (!result.IsSuccess) { Output.Warn(Messages.UnexpectedInputForSpecifyingDecimal); return(this); } else { CreateAmountResult createStakeResult = Amount.TryCreate(result.Value, out Amount stake); if (!createStakeResult.IsSuccess || stake == Amount.Zero) { Output.Warn($"Stake should be in ({Amount.Zero}, {Amount.Max}) {Wallet.Currency}."); return(this); } else { StakeResult stakeResult = Wallet.TryStake(stake); if (stakeResult.InvalidStake) { Output.Warn($"Stake of {stake} {Wallet.Currency} is not valid."); return(this); } else if (stakeResult.InsufficientBalance) { Output.Warn("There is no sufficient balance for that stake."); return(this); } else if (stakeResult.MoreThanMaxStake) { Output.Warn($"Cannot stake more than {stakeResult.MaxStake} {Wallet.Currency} due to max balance limitations."); return(this); } else if (stakeResult.IsSuccess) { Logger.LogInformation("Staked {0} {1}.", stake, Wallet.Currency); Output.Inform($"You staked {stake} {Wallet.Currency}."); return(States.Spin); } else { throw new InvalidOperationException("Unexpected stake result."); } } } }