Esempio n. 1
0
        public GambleStonePlayerBetInResult BetIn(GambleStoneItemColor color, int stoneCount, int userID, string userName)
        {
            GambleStonePlayerBetInResult result = new GambleStonePlayerBetInResult();

            if (!this.isListening || this.CurrentInningRunner == null)
            {
                result.ResultCode = OperResult.RESULTCODE_GAME_GAMBLE_INNINGFINISHED;
                return(result);
            }
            return(this.CurrentInningRunner.BetIn(this.RoundInfo.ID, color, stoneCount, userID, userName));
        }
Esempio n. 2
0
        /// <summary>
        /// 下注赌石游戏
        /// </summary>
        /// <param name="token"></param>
        /// <param name="color"></param>
        /// <param name="stoneCount">矿石</param>
        /// <param name="gravelCount">碎片</param>
        /// <returns></returns>
        public GambleStonePlayerBetInResult GambleStoneBetIn(string token, GambleStoneItemColor color, int stoneCount, int gravelCount)
        {
            //优先使用碎片
            if (RSAProvider.LoadRSA(token))
            {
                string userName = null;
                GambleStonePlayerBetInResult betResult = new GambleStonePlayerBetInResult();
                try
                {
                    if (stoneCount == 0 && gravelCount == 0)
                    {
                        betResult.ResultCode = OperResult.RESULTCODE_PARAM_INVALID;
                        return(betResult);
                    }

                    userName = ClientManager.GetClientUserName(token);

                    if (!GambleStoneController.Instance.CheckBetInable())
                    {
                        betResult.ResultCode = OperResult.RESULTCODE_GAME_GAMBLE_INNINGFINISHED;
                        return(betResult);
                    }

                    int result = MyDBHelper.Instance.TransactionDataBaseOper(myTrans =>
                    {
                        int innerResult = PlayerController.Instance.GambleBetIn(userName, color, stoneCount, gravelCount, myTrans);
                        if (innerResult == OperResult.RESULTCODE_TRUE)
                        {
                            var playerInfo = PlayerController.Instance.GetPlayerInfoByUserName(userName);
                            betResult      = GambleStoneController.Instance.BetIn(color, stoneCount + gravelCount, playerInfo.SimpleInfo.UserID, userName);
                            innerResult    = betResult.ResultCode;
                        }

                        return(innerResult);
                    },
                                                                             exc =>
                    {
                        PlayerController.Instance.RollbackUserFromDB(userName);
                        if (exc != null)
                        {
                            LogHelper.Instance.AddErrorLog("玩家[ " + userName + " ] 下注赌石游戏 Inner异常。color: " + color.ToString() + "; stoneCount: " + stoneCount.ToString() + "; gravelCount: " + gravelCount.ToString(), exc);
                        }
                    });
                    if (result != OperResult.RESULTCODE_TRUE)
                    {
                        LogHelper.Instance.AddInfoLog("玩家[ " + userName + " ] 下注赌石游戏失败,数据库操作已回滚");
                    }
                    betResult.ResultCode = result;
                    return(betResult);
                }
                catch (Exception exc)
                {
                    LogHelper.Instance.AddErrorLog("玩家[ " + userName + " ] 下注赌石游戏 异常。color: " + color.ToString() + "; stoneCount: " + stoneCount.ToString() + "; isGravel: " + gravelCount.ToString(), exc);
                    betResult.ResultCode = OperResult.RESULTCODE_EXCEPTION;
                    return(betResult);
                }
            }
            else
            {
                throw new Exception();
            }
        }
Esempio n. 3
0
        public GambleStonePlayerBetInResult BetIn(int roundID, GambleStoneItemColor color, int stoneCount, int userID, string userName)
        {
            lock (_lockBetIn)
            {
                GambleStonePlayerBetInResult result = new GambleStonePlayerBetInResult();

                //客户端倒计时5秒内,不再允许下游。以防止计算错误
                if (this._inningInfo.State != GambleStoneInningStatusType.BetInWaiting)
                {
                    LogHelper.Instance.AddInfoLog("State: " + this._inningInfo.State.ToString());
                    result.ResultCode = OperResult.RESULTCODE_GAME_GAMBLE_INNINGFINISHED;
                    return(result);
                }

                GambleStonePlayerBetRecord betrecord = null;
                if (this._dicPlayerBetRecord.ContainsKey(userID))
                {
                    betrecord = this._dicPlayerBetRecord[userID];
                }
                else
                {
                    betrecord = new GambleStonePlayerBetRecord()
                    {
                        UserID      = userID,
                        UserName    = userName,
                        InningID    = this._inningInfo.ID,
                        InningIndex = this._inningInfo.InningIndex,
                        RoundID     = roundID,
                        Time        = new MyDateTime(DateTime.Now)
                    };
                    this._dicPlayerBetRecord.Add(userID, betrecord);
                }

                switch (color)
                {
                case GambleStoneItemColor.Red:
                    betrecord.BetRedStone        += stoneCount;
                    this._inningInfo.BetRedStone += stoneCount;
                    if (this._dicPlayerBetRedStone.ContainsKey(userID))
                    {
                        this._dicPlayerBetRedStone[userID] += stoneCount;
                    }
                    else
                    {
                        this._dicPlayerBetRedStone.Add(userID, stoneCount);
                    }
                    break;

                case GambleStoneItemColor.Green:
                    betrecord.BetGreenStone        += stoneCount;
                    this._inningInfo.BetGreenStone += stoneCount;
                    if (this._dicPlayerBetGreenStone.ContainsKey(userID))
                    {
                        this._dicPlayerBetGreenStone[userID] += stoneCount;
                    }
                    else
                    {
                        this._dicPlayerBetGreenStone.Add(userID, stoneCount);
                    }
                    break;

                case GambleStoneItemColor.Blue:
                    betrecord.BetBlueStone        += stoneCount;
                    this._inningInfo.BetBlueStone += stoneCount;
                    if (this._dicPlayerBetBlueStone.ContainsKey(userID))
                    {
                        this._dicPlayerBetBlueStone[userID] += stoneCount;
                    }
                    else
                    {
                        this._dicPlayerBetBlueStone.Add(userID, stoneCount);
                    }
                    break;

                case GambleStoneItemColor.Purple:
                    betrecord.BetPurpleStone        += stoneCount;
                    this._inningInfo.BetPurpleStone += stoneCount;
                    if (this._dicPlayerBetPurpleStone.ContainsKey(userID))
                    {
                        this._dicPlayerBetPurpleStone[userID] += stoneCount;
                    }
                    else
                    {
                        this._dicPlayerBetPurpleStone.Add(userID, stoneCount);
                    }
                    break;

                default:
                    break;
                }

                result.PlayerBetRecord = betrecord;
                result.ResultCode      = OperResult.RESULTCODE_TRUE;
                return(result);
            }
        }