/// <summary> /// Get player stats /// </summary> /// <param name="session">Active session</param> /// <param name="player">Specified player</param> /// <returns>Player stats</returns> public SessionCacheStatistic GetPlayerStats(string session, PlayerCollectionItem player, out bool exists) { exists = false; if (!isStarted) { return(new SessionCacheStatistic()); } cacheLock.EnterReadLock(); try { if (cachedData.ContainsKey(session) && cachedData[session].StatisticByPlayer.ContainsKey(player)) { exists = true; return(cachedData[session].StatisticByPlayer[player]); } return(new SessionCacheStatistic()); } finally { cacheLock.ExitReadLock(); } }
/// <summary> /// Gets statistic of the player's last hand /// </summary> /// <param name="session">Session</param> /// <param name="player">Player name</param> /// <returns><see cref="Playerstatistic"/> of the last hand in session</returns> public Playerstatistic GetPlayersLastHandStatistics(string session, PlayerCollectionItem player) { if (!isStarted || string.IsNullOrWhiteSpace(session)) { return(null); } cacheLock.EnterReadLock(); try { if (cachedData.ContainsKey(session) && cachedData[session].LastHandStatisticByPlayer.ContainsKey(player)) { return(cachedData[session].LastHandStatisticByPlayer[player].Copy()); } return(null); } finally { cacheLock.ExitReadLock(); } }
private Player ProcessPlayers(GameInfo gameInfo, PlayerList players, PokerStarsZoomDataObject catcherDataObject) { Player heroPlayer = null; var heroName = catcherDataObject.HeroName; foreach (var player in players) { if (player.PlayerId == 0) { continue; } var isHero = false; if (player.PlayerName.Equals(heroName)) { heroPlayer = player; isHero = true; } var playerCollectionItem = new PlayerCollectionItem { PlayerId = player.PlayerId, Name = player.PlayerName, PokerSite = EnumPokerSites.PokerStars }; var playerCacheStatistic = importerSessionCacheService.GetPlayerStats(gameInfo.Session, playerCollectionItem, out bool exists); if (exists && playerCacheStatistic.IsHero) { heroPlayer = player; gameInfo.GameFormat = playerCacheStatistic.GameFormat; break; } else if (!exists && gameInfo.GameFormat == GameFormat.Zoom) { var playerCacheInfo = new PlayerStatsSessionCacheInfo { Session = gameInfo.Session, GameFormat = gameInfo.GameFormat, Player = playerCollectionItem, IsHero = isHero, Stats = new Playerstatistic { SessionCode = gameInfo.Session, PokergametypeId = ParsePokergametypeIdFromTitle(catcherDataObject.Title) } }; if (playerCacheInfo.Stats.PokergametypeId != 0) { gameInfo.AddToPlayersCacheInfo(playerCacheInfo); } } } if (heroPlayer == null) { return(null); } int prefferedSeatNumber = 0; if (gameInfo.GameFormat == GameFormat.Zoom) { // zoom is always auto-centered switch (gameInfo.TableType) { case EnumTableType.HU: prefferedSeatNumber = 2; break; case EnumTableType.Six: prefferedSeatNumber = 3; break; case EnumTableType.Nine: prefferedSeatNumber = 5; break; } } else { var preferredSeats = ServiceLocator.Current.GetInstance <ISettingsService>().GetSettings(). SiteSettings.SitesModelList.FirstOrDefault(x => x.PokerSite == EnumPokerSites.PokerStars)?.PrefferedSeats; var prefferedSeat = preferredSeats?.FirstOrDefault(x => x.TableType == catcherDataObject.TableType && x.IsPreferredSeatEnabled); if (prefferedSeat != null) { prefferedSeatNumber = prefferedSeat.PreferredSeat; } } if (prefferedSeatNumber > 0) { var shift = (prefferedSeatNumber - heroPlayer.SeatNumber) % catcherDataObject.MaxPlayers; foreach (var player in players) { player.SeatNumber = GeneralHelpers.ShiftPlayerSeat(player.SeatNumber, shift, catcherDataObject.MaxPlayers); } } return(heroPlayer); }
protected virtual void ProcessFastFoldNoticeGameReset(FastFoldImportDto fastFoldImportDto) { var noticeGameSnapshot = fastFoldImportDto.HandBuilder.GetNoticeRoomSnapShot(fastFoldImportDto.Package); if (noticeGameSnapshot == null || fastFoldImportDto.NoticeResetGame.Players == null || !long.TryParse(fastFoldImportDto.NoticeResetGame.GameId, out long handId)) { LogProvider.Log.Error(Logger, $"Failed to get snapshot for {fastFoldImportDto.Package.UserId} of {fastFoldImportDto.Package.RoomId} (Fast Fold)."); return; } // load players from db var playersToAdd = fastFoldImportDto.NoticeResetGame.Players .Select(x => x.Playerid.ToString()) .Where(x => !fastFoldImportDto.PlayerNamePlayerIdMap.ContainsKey(x)) .ToArray(); if (playersToAdd.Length > 0) { using (var session = ModelEntities.OpenSession()) { var playerNamePlayerIdToAdd = session.Query <Players>() .Where(x => x.PokersiteId == (short)Site && playersToAdd.Contains(x.Playername)) .Select(x => new { x.Playername, x.PlayerId }) .ToArray(); playerNamePlayerIdToAdd.ForEach(x => fastFoldImportDto.PlayerNamePlayerIdMap.Add(x.Playername, x.PlayerId)); } } var fastFoldRoomId = fastFoldImportDto.HandBuilder .GetFastFoldRoomByUser(fastFoldImportDto.Package.UserId); if (fastFoldRoomId == 0) { fastFoldRoomId = fastFoldImportDto.Package.RoomId; } var gameInfo = new GameInfo { Session = $"{fastFoldRoomId}{fastFoldImportDto.Package.UserId}", WindowHandle = fastFoldImportDto.WindowHandle.ToInt32(), PokerSite = Site, GameType = Bovada.GameType.Holdem, TableType = (EnumTableType)noticeGameSnapshot.Params.PlayerCountMax, GameFormat = GameFormat.FastFold, GameNumber = handId }; // Initialize cache gameInfo.ResetPlayersCacheInfo(); var players = new PlayerList(fastFoldImportDto.NoticeResetGame.Players.Select(x => new Player(x.Playerid.ToString(), 0, x.Seatid + 1) { PlayerId = fastFoldImportDto.PlayerNamePlayerIdMap.ContainsKey(x.Playerid.ToString()) ? fastFoldImportDto.PlayerNamePlayerIdMap[x.Playerid.ToString()] : 0, PlayerNick = x.Name })); Player heroPlayer = null; foreach (var player in players) { if (player.PlayerId == 0) { continue; } var isHero = false; if (player.PlayerName.Equals(fastFoldImportDto.Package.UserId.ToString())) { heroPlayer = player; isHero = true; } var playerCollectionItem = new PlayerCollectionItem { PlayerId = player.PlayerId, Name = player.PlayerName, PokerSite = Site }; var playerCacheStatistic = fastFoldImportDto.ImporterSessionCacheService.GetPlayerStats(gameInfo.Session, playerCollectionItem, out bool exists); if (exists && playerCacheStatistic.IsHero) { heroPlayer = player; gameInfo.GameFormat = playerCacheStatistic.GameFormat; break; } else if (!exists && gameInfo.GameFormat == GameFormat.FastFold) { var playerCacheInfo = new PlayerStatsSessionCacheInfo { Session = gameInfo.Session, GameFormat = gameInfo.GameFormat, Player = playerCollectionItem, IsHero = isHero, Stats = new Playerstatistic { SessionCode = gameInfo.Session, PokergametypeId = (short)HandHistories.Objects.GameDescription.GameType.NoLimitHoldem } }; if (playerCacheInfo.Stats.PokergametypeId != 0) { gameInfo.AddToPlayersCacheInfo(playerCacheInfo); } } } PreparePlayerList(players, noticeGameSnapshot.Params.PlayerCountMax, heroPlayer != null ? heroPlayer.SeatNumber : 0); var importedArgs = new DataImportedEventArgs(players, gameInfo, heroPlayer, 0); eventAggregator.GetEvent <DataImportedEvent>().Publish(importedArgs); }
/// <summary> /// Gets collection of player statistics that are used for Bumper Stickers calculations /// </summary> /// <param name="session">Session</param> /// <param name="playerName">Player name</param> /// <returns>Dictionary of bumper stickers and related statistic</returns> public Dictionary <string, HudStickerIndicators> GetPlayersStickersStatistics(string session, PlayerCollectionItem player) { if (!isStarted || string.IsNullOrWhiteSpace(session)) { return(null); } cacheLock.EnterReadLock(); try { if (cachedData.ContainsKey(session) && cachedData[session].StickersStatisticByPlayer.ContainsKey(player)) { return(cachedData[session].StickersStatisticByPlayer[player]); } return(null); } finally { cacheLock.ExitReadLock(); } }
/// <summary> /// Get player stats /// </summary> /// <param name="session">Active session</param> /// <param name="player">Specified player</param> /// <returns>Player stats</returns> public SessionCacheStatistic GetPlayerStats(string session, PlayerCollectionItem player) { return(GetPlayerStats(session, player, out bool exists)); }