public void GambleStoneBetIn(GambleStoneItemColor color, int stoneCount, int gravelCount, object userState) { if (this._invoker != null) { this._invoker.InvokeUserState <GambleStonePlayerBetInResult>(this._context, "GambleStoneBetIn", this.GambleStoneBetInCompleted, userState, GlobalData.Token, color, stoneCount, gravelCount); } }
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)); }
private void BetIn(GambleStoneItemColor itemColor) { if (App.GambleStoneVMObject.CurrentInningInfo == null) { return; } if (App.GambleStoneVMObject.CurrentInningInfo.CountDownSeconds < 5) { return; } int stoneCount = 0; int gravelCount = 0; int allStone = 10; if (chk10Stones.IsChecked == true) { allStone = 10; } else if (chk100Stones.IsChecked == true) { allStone = 100; } else if (chk1000Stones.IsChecked == true) { allStone = 1000; } //优先使用碎片 if (GlobalData.CurrentUser.Gravel >= allStone) { gravelCount = allStone; } else { gravelCount = GlobalData.CurrentUser.Gravel; } stoneCount = allStone - gravelCount; if (stoneCount > GlobalData.CurrentUser.SellableStones) { MyMessageBox.ShowInfo("没有足够的矿石"); return; } App.GambleStoneVMObject.AsyncBetIn(itemColor, stoneCount, gravelCount); }
public void AsyncBetIn(GambleStoneItemColor color, int stoneCount, int gravelCount) { switch (color) { case GambleStoneItemColor.Red: if (this._currentBetInBlue && this._currentBetInGreen) { MyMessageBox.ShowInfo("红、绿、蓝,同时最多只能下注两种。"); return; } this._currentBetInRed = true; break; case GambleStoneItemColor.Green: if (this._currentBetInBlue && this._currentBetInRed) { MyMessageBox.ShowInfo("红、绿、蓝,同时最多只能下注两种。"); return; } this._currentBetInGreen = true; break; case GambleStoneItemColor.Blue: if (this._currentBetInGreen && this._currentBetInRed) { MyMessageBox.ShowInfo("红、绿、蓝,同时最多只能下注两种。"); return; } this._currentBetInBlue = true; break; case GambleStoneItemColor.Purple: break; default: break; } //App.BusyToken.ShowBusyWindow("正在下注..."); GlobalData.Client.GambleStoneBetIn(color, stoneCount, gravelCount, null); }
public void SetWinnedInningColor(int index, GambleStoneItemColor color) { if (index >= 0 && index < this._parentObject.WinColorItems.Length) { this._parentObject.WinColorItems[index] = (byte)color; this._parentObject.FinishedInningCount++; //this._winnedColors[index] = GetWinnedInningColorImg(index); switch (color) { case GambleStoneItemColor.Red: this._parentObject.CurrentWinRedCount++; break; case GambleStoneItemColor.Green: this._parentObject.CurrentWinGreenCount++; break; case GambleStoneItemColor.Blue: this._parentObject.CurrentWinBlueCount++; break; case GambleStoneItemColor.Purple: this._parentObject.CurrentWinPurpleCount++; break; default: break; } NotifyPropertyChange("CurrentWinRedCount"); NotifyPropertyChange("CurrentWinGreenCount"); NotifyPropertyChange("CurrentWinBlueCount"); NotifyPropertyChange("CurrentWinPurpleCount"); //NotifyPropertyChange("WinnedInning1ColorImg" + (index + 1)); } }
/// <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); } }