Exemple #1
0
        /// <summary>
        /// Get or add session data to cache for specified session (must be used inside write lock)
        /// </summary>
        /// <param name="session">Session</param>
        /// <returns>Session data of specified session</returns>
        private SessionCacheData GetOrAddSessionData(SessionCreationInfo sessionCreationInfo)
        {
            Check.Require(!cacheLock.IsWriteLockHeld, "Write lock must be held before using this function");

            SessionCacheData sessionData = null;

            if (cachedData.ContainsKey(sessionCreationInfo.Session))
            {
                sessionData = cachedData[sessionCreationInfo.Session];
                sessionData.LastModified = DateTime.Now;
            }
            else
            {
                sessionData = new SessionCacheData
                {
                    PokerSiteId     = sessionCreationInfo.PokerSiteId,
                    IsTourney       = sessionCreationInfo.IsTourney,
                    PokerGameTypeId = sessionCreationInfo.PokerGameTypeId
                };

                cachedData.Add(sessionCreationInfo.Session, sessionData);
            }

            RemoveExpiredSessions();

            return(sessionData);
        }
Exemple #2
0
            public override object SessionCreate(SessionCreationInfo sessionInfo)
            {
                // Optionally create and return a session object with sessionInfo if you want to track that same object
                // when the client validates its session (anonymous, username + password or certificate).

                return(null);
            }
Exemple #3
0
            public override object SessionCreate(SessionCreationInfo sessionInfo)
            {
                // Create and return a session object with sessionInfo

                return(null);
            }
Exemple #4
0
        /// <summary>
        /// Stores specified player data in cache
        /// </summary>
        /// <param name="cacheInfo"><see cref="PlayerStatsSessionCacheInfo"/> to store in cache</param>
        public void AddOrUpdatePlayersStats(IEnumerable <PlayerStatsSessionCacheInfo> cacheInfos, string session, SessionStatisticCondition condition)
        {
            if (!isStarted || cacheInfos == null || !cacheInfos.Any() || string.IsNullOrEmpty(session))
            {
                return;
            }

            cacheLock.EnterWriteLock();

            try
            {
                var cacheCreationInfo = cacheInfos.First();

                var sessionCreationInfo = new SessionCreationInfo
                {
                    Session         = session,
                    PokerSiteId     = (int)cacheCreationInfo.Player.PokerSite,
                    IsTourney       = cacheCreationInfo.Stats.IsTourney,
                    PokerGameTypeId = cacheCreationInfo.Stats.PokergametypeId
                };

                var sessionData = GetOrAddSessionData(sessionCreationInfo);

                // clear statistic for all players except for hero if filter was changed
                if (!condition.Filter.Equals(sessionData.Filter))
                {
                    sessionData.StatisticByPlayer.RemoveByCondition(x => !x.Value.IsHero);
                    sessionData.Filter = condition.Filter;
                }

                // clear statistic for all players if heat map stats was changed
                if (condition.HeatMapStats.Count() > 0 &&
                    condition.HeatMapStats.Any(x => !sessionData.HeatMapStats.Contains(x)))
                {
                    sessionData.StatisticByPlayer.Clear();
                    sessionData.HeatMapStats = condition.HeatMapStats;
                }

                var playerSessionCacheStatistic = GetSessionCacheStatistic(cacheInfos, sessionData);

                foreach (var playerSessionCache in playerSessionCacheStatistic)
                {
                    var cacheInfo             = playerSessionCache.Key;
                    var sessionCacheStatistic = playerSessionCache.Value;

                    // Add last hand info
                    if (sessionData.LastHandStatisticByPlayer.ContainsKey(cacheInfo.Player))
                    {
                        sessionData.LastHandStatisticByPlayer[cacheInfo.Player] = cacheInfo.Stats.Copy();
                    }
                    else
                    {
                        sessionData.LastHandStatisticByPlayer.Add(cacheInfo.Player, cacheInfo.Stats.Copy());
                    }

                    if (cacheInfo.IsHero && !sessionCacheStatistic.SessionHands.Contains(cacheInfo.Stats.GameNumber))
                    {
                        sessionCacheStatistic.SessionHands.Add(cacheInfo.Stats.GameNumber);
                    }

                    sessionCacheStatistic.PlayerData.AddStatistic(cacheInfo.Stats);

                    InitSessionCardsCollections(sessionCacheStatistic.PlayerData, cacheInfo.Stats);
                    InitSessionStatCollections(sessionCacheStatistic.PlayerData, cacheInfo.Stats);

                    if (cacheInfo.Stats.SessionCode == session)
                    {
                        sessionCacheStatistic.SessionPlayerData.AddStatistic(cacheInfo.Stats);

                        InitSessionCardsCollections(sessionCacheStatistic.SessionPlayerData, cacheInfo.Stats);
                        InitSessionStatCollections(sessionCacheStatistic.SessionPlayerData, cacheInfo.Stats);
                    }
                }
            }
            finally
            {
                cacheLock.ExitWriteLock();
            }
        }