public void End_Player_Listen( EPersistenceID player_id, EPlayerListenReason reason )
        {
            CClientPlayerInfo player_info = Get_Player_Info( player_id );
            Debug.Assert( player_info != null );

            player_info.Remove_Listen_Ref( reason );
            if ( !player_info.Has_References() )
            {
                Remove_Player( player_id );
            }
        }
        public void Begin_Player_Listen( EPersistenceID player_id, string player_name, EPlayerListenReason reason )
        {
            CClientPlayerInfo player_info = Get_Player_Info( player_id );
            if ( player_info == null )
            {
                player_info = new CClientPlayerInfo( player_id );
                m_Players.Add( player_id, player_info );
                Query_Player( player_id );
            }

            if ( player_name != null && player_info.Name == null )
            {
                player_info.Name = player_name;
            }

            player_info.Add_Listen_Ref( reason );
        }
 public void Begin_Player_Listen( EPersistenceID player_id, EPlayerListenReason reason )
 {
     Begin_Player_Listen( player_id, null, reason );
 }
        public void Remove_Listen_Ref( EPlayerListenReason reason )
        {
            if ( !m_ReasonCounts.ContainsKey( reason ) )
            {
                throw new CApplicationException( "Unbalanced player reference count" );
            }

            int current_value = m_ReasonCounts[ reason ];
            if ( current_value < 1 )
            {
                throw new CApplicationException( "Unbalanced player reference count" );
            }

            if ( current_value == 1 )
            {
                m_ReasonCounts.Remove( reason );
            }
            else
            {
                m_ReasonCounts[ reason ] = current_value - 1;
            }
        }
 public bool Is_Listening_Due_To( EPlayerListenReason reason )
 {
     return m_ReasonCounts.ContainsKey( reason );
 }
        // Methods
        // Public interface
        public void Add_Listen_Ref( EPlayerListenReason reason )
        {
            if ( !m_ReasonCounts.ContainsKey( reason ) )
            {
                m_ReasonCounts[ reason ] = 1;
                return;
            }

            int current_value = m_ReasonCounts[ reason ];
            m_ReasonCounts[ reason ] = current_value + 1;
        }