Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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);
            }
        }