Beispiel #1
0
        private GameRunner()
        {
            Task.Run(SubData).Wait();

            var PokerTableSql = new Poker_Table_SQL();
            var ListOfUsers   = new User_SQL().GetUserList();
            var ListOfTables  = PokerTableSql.GetTableList();

            foreach (var table in ListOfTables)
            {
                Tabels.Add(table["Table_Name"], new List <User>());
            }

            foreach (var u in ListOfUsers)
            {
                var pktId = u["Poker_Table_Table_ID"];

                if (pktId is DBNull)
                {
                    continue;
                }

                //TabelsIds[u["Poker_Table_Table_ID"]]
                Tabels[PokerTableSql.GetNameByID(pktId)].Add(new User
                {
                    Join_Game            = Convert.ToBoolean(u["Join_Game"]),
                    User_ID              = u["User_ID"],
                    Wins                 = u["Wins"],
                    Lastname             = u["Lastname"],
                    Firstname            = u["Firstname"],
                    Poker_Table_Table_ID = pktId
                });
            }

            _tables["Tables"] = JsonConvert.SerializeObject(Tabels, Formatting.Indented);

            // TimeSpan.FromMinutes(minutes).TotalMilliseconds
            _gameTimer                   = new Stopwatch();
            _notificationTimer           = new Timer(1000);
            _notificationTimer.Elapsed  += PushNotification;
            _notificationTimer.AutoReset = true;

            _roundTimer           = new Timer(25000);
            _roundTimer.Elapsed  += NextRound;
            _roundTimer.AutoReset = true;
        }
        /// <summary>
        /// automatic devides users in tables
        /// </summary>
        /// <param name="id">url id(profile)</param>
        /// <returns></returns>
        public ActionResult SetupTables(int?id)
        {
            if (id == null)
            {
                return(View("Index"));
            }
            new User_SQL().ResetAllTableID();
            new Poker_Table_SQL().DeleteAllTables();

            var PokerTableSql = new Poker_Table_SQL();

            var tableRecord = DeepStreamConnector.Instance.GetRecord("Tables");
            var players     = new User_SQL().GetUserList(true);

            var playersCount = players.Count;
            var tablesCount  = 1;

            var cnt = playersCount / tablesCount;

            while (cnt >= 10)
            {
                tablesCount++;
                cnt = playersCount / tablesCount;
            }

            var playersAtTable = new int[tablesCount];

            for (var i = 0; i < playersAtTable.Length; i++)
            {
                playersAtTable[i] = playersCount / tablesCount;
            }

            for (var r = 0; r < playersCount % tablesCount; r++)
            {
                playersAtTable[r % tablesCount]++;
            }

            players.Sort((x, y) => y.Wins - x.Wins);

            playersCount = 0;
            tablesCount  = 0;

            GameRunner.Instance.Tabels.Clear();

            foreach (var y in playersAtTable)
            {
                var tableName = $"Tafel nummer {tablesCount}";
                var users     = new List <User>();

                var SQLTableId = PokerTableSql.GetIDByName(tableName);

                if (SQLTableId == -1)
                {
                    SQLTableId = PokerTableSql.CreateTable(tableName);
                }

                for (var i = 0; i < y; i++)
                {
                    var plr = players[playersCount];
                    new User_SQL().SetTable(plr.User_ID, SQLTableId);
                    users.Add(plr);

                    playersCount++;
                    if (playersCount >= players.Count)
                    {
                        playersCount = 0;
                    }
                }
                GameRunner.Instance.Tabels.Add(tableName, users);
                tablesCount++;
            }

            tableRecord["Tables"] = JsonConvert.SerializeObject(GameRunner.Instance.Tabels);

            return(RedirectToAction("Index"));
        }