Beispiel #1
0
        protected override void PublishImportedResults(DataImportedEventArgs args)
        {
            // do not update HUD when hand is imported for FF games
            if (args.GameInfo.GameFormat == GameFormat.FastFold)
            {
                args.DoNotUpdateHud = true;
            }

            base.PublishImportedResults(args);
        }
Beispiel #2
0
        protected override void PublishImportedResults(DataImportedEventArgs args)
        {
            // we don't publish imported data for zoom
            if (args.GameInfo.GameFormat == GameFormat.Zoom)
            {
                args.DoNotUpdateHud = true;
            }

            base.PublishImportedResults(args);
        }
        public void ProcessData(PokerStarsZoomDataObject catcherDataObject)
        {
            if (catcherDataObject == null || catcherDataObject.Handle == 0)
            {
                return;
            }

            try
            {
                PokerStarsZoomCacheData cachedObject;

                var isNew = false;

                if (!cachedData.ContainsKey(catcherDataObject.Handle))
                {
                    cachedObject = new PokerStarsZoomCacheData
                    {
                        Data = catcherDataObject
                    };

                    cachedData.Add(catcherDataObject.Handle, cachedObject);

                    isNew = true;
                }
                else
                {
                    cachedObject = cachedData[catcherDataObject.Handle];
                }

                cachedObject.LastModified = DateTime.Now;

                RemoveExpiredCache();

                if (!isNew)
                {
                    if (cachedObject.IsProcessed && ComparePlayers(cachedObject.Data, catcherDataObject))
                    {
                        return;
                    }

                    cachedObject.Data = catcherDataObject;
                }

                LoadPlayers(catcherDataObject.Players.Select(x => x.Player));

                var gameInfo = new GameInfo
                {
                    Session      = catcherDataObject.Handle.ToString(),
                    WindowHandle = catcherDataObject.Handle,
                    PokerSite    = EnumPokerSites.PokerStars,
                    GameType     = catcherDataObject.GameType,
                    TableType    = catcherDataObject.TableType,
                    GameFormat   = catcherDataObject.GameFormat,
                    GameNumber   = catcherDataObject.HandNumber
                };

                // Initialize cache
                gameInfo.ResetPlayersCacheInfo();

                var players = new PlayerList(catcherDataObject.Players.Select(x =>
                                                                              new Player(x.Player, 0, x.Seat)
                {
                    PlayerId = playerNamePlayerIdMap.ContainsKey(x.Player) ? playerNamePlayerIdMap[x.Player] : 0
                }));

                var heroPlayer = ProcessPlayers(gameInfo, players, catcherDataObject);

                if (heroPlayer == null || (gameInfo.GameFormat != GameFormat.Zoom && gameInfo.GameFormat != GameFormat.Cash))
                {
                    return;
                }

                var importedArgs = new DataImportedEventArgs(players, gameInfo, heroPlayer, 0);
                eventAggregator.GetEvent <DataImportedEvent>().Publish(importedArgs);

                cachedObject.IsProcessed = true;
#if DEBUG
                Console.WriteLine($@"Data has been send to {catcherDataObject.TableName}, {catcherDataObject.Handle}, {catcherDataObject.TableName} {(int)catcherDataObject.TableType}-max, {string.Join(", ", players.Select(x => $"{x.PlayerName}[{x.PlayerId}]").ToArray())}");
#endif
            }
            catch (Exception ex)
            {
                LogProvider.Log.Error(this, "Stream data was in wrong format", ex);
            }
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        /// <summary>
        /// Import results in DB
        /// </summary>
        /// <param name="convertedResult"></param>
        private void ImportResult(ConvertedResult convertedResult)
        {
            // send data to file importer
            var dbImporter = ServiceLocator.Current.GetInstance <IFileImporter>();
            var progress   = new DHProgress();

            IEnumerable <ParsingResult> parsingResult = null;

            LogProvider.Log.Info(this, $"Hand {convertedResult.HandNumber} processed. [{Identifier}]");

            try
            {
                parsingResult = dbImporter.Import(convertedResult.ConvertedXml, progress, convertedResult.GameInfo);
            }
            catch (DHLicenseNotSupportedException)
            {
                LogProvider.Log.Error(this, $"Hand {convertedResult.HandNumber} has not been imported. License issue. [{Identifier}]");

                var windowHwnd = new IntPtr(convertedResult.GameInfo.WindowHandle);

                if (windowHwnd != IntPtr.Zero && WinApi.IsWindow(windowHwnd))
                {
                    var preImportedArgs = new PreImportedDataEventArgs(convertedResult.GameInfo,
                                                                       CommonResourceManager.Instance.GetResourceString("Notifications_HudLayout_PreLoadingText_NoLicense"));

                    eventAggregator.GetEvent <PreImportedDataEvent>().Publish(preImportedArgs);
                }

                return;
            }
            catch (Exception e)
            {
                LogProvider.Log.Error(this, string.Format("Hand {0} has not been imported. [{1}]", convertedResult.HandNumber, Identifier), e);
            }

            if (parsingResult == null)
            {
                return;
            }

            foreach (var result in parsingResult)
            {
                if (result.HandHistory == null)
                {
                    continue;
                }

                if (result.IsDuplicate)
                {
                    LogProvider.Log.Info(this, string.Format("Hand {0} has not been imported. Duplicate. [{1}]", result.HandHistory.Gamenumber, Identifier));
                    continue;
                }

                if (!result.WasImported)
                {
                    LogProvider.Log.Info(this, string.Format("Hand {0} has not been imported. [{1}]", result.HandHistory.Gamenumber, Identifier));
                    continue;
                }

                LogProvider.Log.Info(this, string.Format("Hand {0} has been imported in {2}ms. [{1}]", result.HandHistory.Gamenumber, Identifier, result.Duration));

                if (result.Source.GameDescription.TableTypeDescriptors.Contains(TableTypeDescription.FastFold))
                {
                    var preImportedArgs = new PreImportedDataEventArgs(convertedResult.GameInfo,
                                                                       CommonResourceManager.Instance.GetResourceString("Notifications_HudLayout_PreLoadingText_NotSupportedFastFold"));

                    eventAggregator.GetEvent <PreImportedDataEvent>().Publish(preImportedArgs);

                    return;
                }

                var dataImportedArgs = new DataImportedEventArgs(result.Source.Players, convertedResult.GameInfo, result.Source.Hero, result.Source.HandId);
                eventAggregator.GetEvent <DataImportedEvent>().Publish(dataImportedArgs);
            }
        }