internal void Reset()
        {
            PriorityPlayer = 0;
            MyLibrary.ResetCards();
            OpponentCardsSeen.ResetCards();
            MySideboard.ResetCards();
            //FullDeck.ResetCards();

            TimerMe.Reset();
            TimerOpponent.Reset();

            // notify that everything changed
            RaisePropertyChangedEvent(string.Empty);
        }
        internal void SetInMatchStateFromBuffered()
        {
            if (UpdateCardsInMatchTrackingBuffered == false)
            {
                return;
            }

            if (MustReset)
            {
                Reset();
                MustReset = false;
            }

            if (StateBuffered.MySeatId == 0)
            {
                return;
            }

            lock (LockCardsInMatchTracking)
            {
                // Timers
                if (StateBuffered.IsSideboarding)
                {
                    TimerMe.Pause();
                    TimerOpponent.Pause();
                }
                if (PriorityPlayer != StateBuffered.PriorityPlayer)
                {
                    PriorityPlayer = StateBuffered.PriorityPlayer;

                    if (PriorityPlayer == StateBuffered.MySeatId)
                    {
                        TimerMe.Resume();
                        TimerOpponent.Pause();
                    }
                    else if (PriorityPlayer == StateBuffered.OpponentSeatId)
                    {
                        TimerMe.Pause();
                        TimerOpponent.Resume();
                    }
                }

                // Cards lists
                if (StateBuffered.MySeatId > 0)
                {
                    try
                    {
                        MyLibrary.ConvertCardList(StateBuffered.MyLibrary);

                        OpponentCardsSeen.ConvertCardList(StateBuffered.OpponentCardsSeen);

                        MySideboard.ConvertCardList(StateBuffered.MySideboard);
                    }
                    catch (KeyNotFoundException)
                    {
                        // Swallow this reported bug: "Got a crash after I conceded a game"
                        // I suppose the MySeatId got to 0 after the validation
                    }

                    RaisePropertyChangedEvent(string.Empty);
                }

                //if (isInitialized == false && stateBuffered.CardsByZone[stateBuffered.MySeatId][ZoneSimpleEnum.ZoneType_Library].Count > 0)
                //{
                //    FullDeck.ConvertCardList(stateBuffered.CardsByZone[stateBuffered.MySeatId][ZoneSimpleEnum.ZoneType_Library].ToDictionary(i => i.Key, i => i.Value.Count));
                //    RaisePropertyChangedEvent(nameof(FullDeck));
                //    isInitialized = true;
                //}

                UpdateCardsInMatchTrackingBuffered = false;
            }
        }