public void OnGameEvent(GameEvent gameEvent)
        {
            GameEventDescriptor gameEventDescriptor;

            if (m_GameEventDescriptors.TryGetValue(gameEvent.ID, out gameEventDescriptor))
            {
                if (gameEvent.Keys.Count != gameEventDescriptor.Keys.Count)
                {
                    Console.WriteLine("GameEvent ({0}) and GameEventDescriptor ({1}) Key Count Mismatch", gameEvent.ID, gameEventDescriptor.Name);
                }

                OnGameEvent onGameEvent;

                if (m_GameEventHandlers.TryGetValue(gameEventDescriptor.Name, out onGameEvent))
                {
                    onGameEvent(gameEvent, gameEventDescriptor);
                }

                m_Demo.GameObservers.GameEvent(gameEvent, gameEventDescriptor);

                if(!m_UsedGameEventDescriptors.Contains(gameEventDescriptor))
                {
                    m_UsedGameEventDescriptors.Add(gameEventDescriptor);
                }
            }
            else
            {
                Console.WriteLine("GameEvent ({0}) Without GameEventDescriptor", gameEvent.ID);
            }
        }
        public void GameEvent(GameEvent gameEvent, GameEventDescriptor gameEventDescriptor)
        {
            for (int i = 0; i < this.m_Values.Count; i++)
            {
                GameObserver gameObserver = this.m_Values[i];

                gameObserver.GameEvent(gameEvent, gameEventDescriptor);
            }
        }
        private void GameEvent(byte[] packetBuffer)
        {
            GameEvent gameEvent = new GameEvent(packetBuffer);

            m_Demo.GameEventHandlers.OnGameEvent(gameEvent);
        }