From 4013c5ae48096fc7c7e40501e9204518b271ebb7 Mon Sep 17 00:00:00 2001 From: Alexander Zeier Date: Thu, 6 Oct 2016 11:05:07 +0200 Subject: [PATCH] move PackOpeningWatcher to HearthWatcher project --- HearthWatcher.Test/ArenaWatcherTests.cs | 1 + HearthWatcher/ArenaWatcher.cs | 1 + HearthWatcher/EventArgs/PackEventArgs.cs | 17 +++++ HearthWatcher/HearthWatcher.csproj | 5 +- HearthWatcher/PackOpeningWatcher.cs | 60 +++++++++++++++++ .../{ => Providers}/IArenaProvider.cs | 2 +- HearthWatcher/Providers/IPackProvider.cs | 11 ++++ .../Hearthstone Deck Tracker.csproj | 15 +---- .../Hearthstone/PackOpeningWatcher.cs | 66 ------------------- .../Hearthstone/Watchers.cs | 12 ++++ .../Handlers/LoadingScreenHandler.cs | 10 +-- 11 files changed, 115 insertions(+), 85 deletions(-) create mode 100644 HearthWatcher/EventArgs/PackEventArgs.cs create mode 100644 HearthWatcher/PackOpeningWatcher.cs rename HearthWatcher/{ => Providers}/IArenaProvider.cs (79%) create mode 100644 HearthWatcher/Providers/IPackProvider.cs delete mode 100644 Hearthstone Deck Tracker/Hearthstone/PackOpeningWatcher.cs diff --git a/HearthWatcher.Test/ArenaWatcherTests.cs b/HearthWatcher.Test/ArenaWatcherTests.cs index eee73ceb85..132d32b0bd 100644 --- a/HearthWatcher.Test/ArenaWatcherTests.cs +++ b/HearthWatcher.Test/ArenaWatcherTests.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Threading; using HearthMirror.Objects; +using HearthWatcher.Providers; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace HearthWatcher.Test diff --git a/HearthWatcher/ArenaWatcher.cs b/HearthWatcher/ArenaWatcher.cs index 1fe036a8dd..49f8d141a7 100644 --- a/HearthWatcher/ArenaWatcher.cs +++ b/HearthWatcher/ArenaWatcher.cs @@ -3,6 +3,7 @@ using System.Threading.Tasks; using HearthMirror.Objects; using HearthWatcher.EventArgs; +using HearthWatcher.Providers; namespace HearthWatcher { diff --git a/HearthWatcher/EventArgs/PackEventArgs.cs b/HearthWatcher/EventArgs/PackEventArgs.cs new file mode 100644 index 0000000000..884b32b83c --- /dev/null +++ b/HearthWatcher/EventArgs/PackEventArgs.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; +using HearthMirror.Objects; + +namespace HearthWatcher.EventArgs +{ + public class PackEventArgs : System.EventArgs + { + public PackEventArgs(List cards, int packId) + { + Cards = cards; + PackId = packId; + } + + public List Cards { get; } + public int PackId { get; set; } + } +} diff --git a/HearthWatcher/HearthWatcher.csproj b/HearthWatcher/HearthWatcher.csproj index fddf083a6e..9916fbe0db 100644 --- a/HearthWatcher/HearthWatcher.csproj +++ b/HearthWatcher/HearthWatcher.csproj @@ -65,7 +65,10 @@ - + + + + diff --git a/HearthWatcher/PackOpeningWatcher.cs b/HearthWatcher/PackOpeningWatcher.cs new file mode 100644 index 0000000000..eafe3d6baa --- /dev/null +++ b/HearthWatcher/PackOpeningWatcher.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using HearthMirror.Objects; +using HearthWatcher.EventArgs; +using HearthWatcher.Providers; + +namespace HearthWatcher +{ + public class PackOpeningWatcher + { + public delegate void PackEventHandler(object sender, PackEventArgs args); + + private readonly List _previousPack = new List(); + private readonly int _delay; + private bool _running; + private bool _watch; + private readonly IPackProvider _packProvider; + + public PackOpeningWatcher(IPackProvider packProvider, int delay = 1000) + { + if(packProvider == null) + throw new ArgumentNullException(nameof(packProvider)); + _packProvider = packProvider; + _delay = delay; + } + public event PackEventHandler NewPackEventHandler; + + public void Run() + { + _watch = true; + if(!_running) + CheckForPacks(); + } + + public void Stop() => _watch = false; + + private async void CheckForPacks() + { + _running = true; + while(_watch) + { + await Task.Delay(_delay); + if(!_watch) + break; + var cards = _packProvider.GetCards(); + if(cards?.Any() ?? false) + { + if(cards.All(x => _previousPack.Any(c => c.Id == x.Id & c.Premium == x.Premium))) + continue; + _previousPack.Clear(); + _previousPack.AddRange(cards); + NewPackEventHandler?.Invoke(this, new PackEventArgs(cards, _packProvider.GetPackId())); + } + } + _running = false; + } + } +} diff --git a/HearthWatcher/IArenaProvider.cs b/HearthWatcher/Providers/IArenaProvider.cs similarity index 79% rename from HearthWatcher/IArenaProvider.cs rename to HearthWatcher/Providers/IArenaProvider.cs index 9c55d45e05..5b748112c0 100644 --- a/HearthWatcher/IArenaProvider.cs +++ b/HearthWatcher/Providers/IArenaProvider.cs @@ -1,6 +1,6 @@ using HearthMirror.Objects; -namespace HearthWatcher +namespace HearthWatcher.Providers { public interface IArenaProvider { diff --git a/HearthWatcher/Providers/IPackProvider.cs b/HearthWatcher/Providers/IPackProvider.cs new file mode 100644 index 0000000000..c59a5919e2 --- /dev/null +++ b/HearthWatcher/Providers/IPackProvider.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; +using HearthMirror.Objects; + +namespace HearthWatcher.Providers +{ + public interface IPackProvider + { + List GetCards(); + int GetPackId(); + } +} diff --git a/Hearthstone Deck Tracker/Hearthstone Deck Tracker.csproj b/Hearthstone Deck Tracker/Hearthstone Deck Tracker.csproj index c90b81f44a..359a979d1c 100644 --- a/Hearthstone Deck Tracker/Hearthstone Deck Tracker.csproj +++ b/Hearthstone Deck Tracker/Hearthstone Deck Tracker.csproj @@ -422,7 +422,6 @@ - True True @@ -1503,20 +1502,12 @@ xcopy /Y /Q "$(SolutionDir)CHANGELOG.md" "$(ProjectDir)Resources" --> - + - + - + diff --git a/Hearthstone Deck Tracker/Hearthstone/PackOpeningWatcher.cs b/Hearthstone Deck Tracker/Hearthstone/PackOpeningWatcher.cs deleted file mode 100644 index b9a91a833a..0000000000 --- a/Hearthstone Deck Tracker/Hearthstone/PackOpeningWatcher.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using HearthMirror; -using Hearthstone_Deck_Tracker.Utility.Logging; - -namespace Hearthstone_Deck_Tracker.Hearthstone -{ - public class PackOpeningWatcher - { - public delegate void PackEventHandler(object sender, PackEventArgs args); - - private readonly List _previousPack = new List(); - private bool _running; - private bool _watch; - - private PackOpeningWatcher() - { - } - - public static PackOpeningWatcher Instance { get; } = new PackOpeningWatcher(); - public event PackEventHandler NewPackEventHandler; - - internal void Run() - { - _watch = true; - if(!_running) - CheckForPacks(); - } - - internal void Stop() => _watch = false; - - private async void CheckForPacks() - { - _running = true; - while(_watch) - { - await Task.Delay(1000); - if(!_watch) - break; - var cards = Reflection.GetPackCards(); - if(cards?.Any() ?? false) - { - if(cards.All(x => _previousPack.Any(c => c.Id == x.Id & c.Premium == x.Premium))) - continue; - Log.Info("Found new pack: " + string.Join(", ", cards.Select(x => $"{x.Id}{(x.Premium ? " (golden)" : "")}"))); - _previousPack.Clear(); - _previousPack.AddRange(cards); - NewPackEventHandler?.Invoke(this, new PackEventArgs(cards)); - } - } - _running = false; - } - } - - public class PackEventArgs : EventArgs - { - public PackEventArgs(List cards) - { - Cards = cards; - } - - public List Cards { get; } - } -} \ No newline at end of file diff --git a/Hearthstone Deck Tracker/Hearthstone/Watchers.cs b/Hearthstone Deck Tracker/Hearthstone/Watchers.cs index 12a091b5c6..5e9f36c21c 100644 --- a/Hearthstone Deck Tracker/Hearthstone/Watchers.cs +++ b/Hearthstone Deck Tracker/Hearthstone/Watchers.cs @@ -1,8 +1,12 @@ +using System.Collections.Generic; +using System.Linq; using HearthMirror; using HearthMirror.Objects; using Hearthstone_Deck_Tracker.Enums; using Hearthstone_Deck_Tracker.Importing; +using Hearthstone_Deck_Tracker.Utility.Logging; using HearthWatcher; +using HearthWatcher.Providers; namespace Hearthstone_Deck_Tracker.Hearthstone { @@ -11,8 +15,16 @@ public static class Watchers static Watchers() { ArenaWatcher.OnCompleteDeck += (sender, args) => DeckManager.AutoImportArena(Config.Instance.SelectedArenaImportingBehaviour ?? ArenaImportingBehaviour.AutoImportSave, args.Info); + PackWatcher.NewPackEventHandler += (sender, args) => Log.Debug($"New Pack! Id={args.PackId}, Cards=[{string.Join(", ", args.Cards.Select(x => x.Id + (x.Premium ? " (g)" : "")))}]"); } public static ArenaWatcher ArenaWatcher { get; } = new ArenaWatcher(new HearthMirrorArenaProvider()); + public static PackOpeningWatcher PackWatcher { get; } = new PackOpeningWatcher(new HearthMirrorPackProvider()); + } + + public class HearthMirrorPackProvider : IPackProvider + { + public List GetCards() => Reflection.GetPackCards(); + public int GetPackId() => Reflection.GetLastOpenedBoosterId(); } public class HearthMirrorArenaProvider : IArenaProvider diff --git a/Hearthstone Deck Tracker/LogReader/Handlers/LoadingScreenHandler.cs b/Hearthstone Deck Tracker/LogReader/Handlers/LoadingScreenHandler.cs index f0cc0169d4..09fb23adac 100644 --- a/Hearthstone Deck Tracker/LogReader/Handlers/LoadingScreenHandler.cs +++ b/Hearthstone Deck Tracker/LogReader/Handlers/LoadingScreenHandler.cs @@ -1,4 +1,4 @@ -#region +#region using System; using System.ComponentModel; @@ -55,12 +55,12 @@ public void Handle(LogLineItem logLine, IHsGameState gameState, IGame game) Watchers.ArenaWatcher.Stop(); if(game.CurrentMode == Mode.PACKOPENING) - PackOpeningWatcher.Instance.Run(); + Watchers.PackWatcher.Run(); else - PackOpeningWatcher.Instance.Stop(); + Watchers.PackWatcher.Stop(); } else if(logLine.Line.Contains("Gameplay.Start")) - { + { gameState.Reset(); gameState.GameHandler.HandleGameStart(logLine.Time); } @@ -99,4 +99,4 @@ private Mode GetMode(string modeString) return Mode.INVALID; } } -} \ No newline at end of file +}