/// <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); }
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); }
public override object SessionCreate(SessionCreationInfo sessionInfo) { // Create and return a session object with sessionInfo return(null); }
/// <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(); } }