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