private async Task FinishSession() { try { Result.GenerateResult(); _query.Clear(); _query.AppendLine("begin transaction"); _query.AppendLine("begin try"); _query.AppendLine(_logicGold.BuildResult(Result)); _query.AppendLine(_logicCoin.BuildResult(Result)); _query.AppendLine($"update dbo.Session set Status = 1, Dice1 = {(int)Result.Dice1}, Dice2 = {(int)Result.Dice2}, Dice3 = {(int)Result.Dice3} where SessionId = {SessionId}"); _query.AppendLine("commit transaction"); _query.AppendLine("end try"); _query.AppendLine("begin catch"); _query.AppendLine("if @@trancount > 0 begin rollback transaction end;"); _query.AppendLine("throw 50000, 'sql exception', 1"); _query.AppendLine("end catch"); await GameDAO.ExecuteAsync(_query.ToString()); var award = _logicGold.GetAwards(); var awardCoin = _logicCoin.GetAwards(); List <string> excludeConnection = new List <string>( award.SelectMany(x => GetAllConnectionById(x.Key)) .Union(awardCoin.SelectMany(x => GetAllConnectionById(x.Key))) ); List <long> winner = new List <long>( award.Select(x => x.Key).Union(awardCoin.Select(x => x.Key)).Distinct() ); var exclude = excludeConnection.Distinct(); List <string> nonResultUser = new List <string>(); nonResultUser.AddRange(_connectionGold.GetAll().Union(_connectionCoin.GetAll()).Except(exclude)); await Clients.Clients.Clients(nonResultUser).showResult(Elapsed, Result, null, null); foreach (var w in winner) { Dictionary <int, BetLog> gold; Dictionary <int, BetLog> coin; award.TryGetValue(w, out gold); awardCoin.TryGetValue(w, out coin); await Clients.Clients.Clients(GetAllConnectionById(w)).showResult(Elapsed, Result, gold, coin); } } catch (Exception ex) { _logicGold.ReloadRealFund(); _logicCoin.ReloadRealFund(); NLogManager.PublishException(ex); } }
private async Task FinishSession() { try { if (Result > 0) { return; } Result = RandomUtil.NextInt(2) + RandomUtil.NextInt(2) + RandomUtil.NextInt(2) + RandomUtil.NextInt(2); _logic.CalculateResult(Result, SessionId); string data = _logic.GetQuery(); if (string.IsNullOrEmpty(data)) { return; } History.Enqueue(Result); if (History.Count > 50) { History.TryDequeue(out var r); } await GameDAO.ExecuteAsync(data); NLogManager.LogMessage("FINISH SESION: => " + data); var rewards = _logic.GetReward(); var listSit = Sitting.Values.ToList(); List <object> sittings = new List <object>(); foreach (var re in rewards) { Player p = GetPlayer(re.Key); if (p != null) { long totalLose = re.Value.Sum(x => x.Lose); long totalwin = re.Value.Sum(x => x.Prize); long totalrefund = re.Value.Sum(x => x.Refund); if (re.Key == Banker) { p.IncreaseBalance(totalwin - totalLose, MoneyType); } else { p.IncreaseBalance(totalwin + totalrefund, MoneyType); } if (listSit.Exists(x => x?.AccountId == re.Key)) { sittings.Add(new { AccountId = p.AccountId, Balance = MoneyType == MoneyType.GOLD ? p.Gold : p.Coin, TotalLose = totalLose, TotalWin = totalwin, TotalRefund = re.Key == Banker ? 0 : totalrefund, TotalPrize = totalwin }); } } } foreach (var re in rewards) { Player p = GetPlayer(re.Key); if (p != null) { long balance = MoneyType == MoneyType.GOLD ? p.Gold : p.Coin; var lstConnection = _connectionHandler.GetConnections(p.AccountId); _hubContext.Clients.Clients(lstConnection.ToList()).showResult(Result, new { winLose = re.Value, balance = balance }, sittings); } } var player = _players.Where(x => !rewards.ContainsKey(x.Key)); foreach (var re in player) { long balance = MoneyType == MoneyType.GOLD ? re.Value.Gold : re.Value.Coin; var lstConnection = _connectionHandler.GetConnections(re.Value.AccountId); _hubContext.Clients.Clients(lstConnection.ToList()).showResult(Result, new { winLose = new List <Reward>(), balance = balance }, sittings); } } catch (Exception ex) { NLogManager.PublishException(ex); } }