6.2.5 WebPostedEventArgs 구현

웹 페이지 수집 요청의 결과를 통보하는 방법은 이벤트 방식을 사용합시다.

이를 위해 웹 페이지 수집 결과를 인자로 하는 대리자를 정의합니다. 이벤트 방식을 사용하는 대리자는 일반적인 이벤트 핸들러의 구조를 사용합시다. 일반적으로 이벤트 핸들러는 이벤트를 발생한 개체와 이벤트를 처리하기 위해 필요한 인자를 받습니다. 따라서 여기에서도 이벤트를 발생한 개체와 이벤트를 처리하기 위한 인자를 입력 인자로 받는 대리자를 정의합시다.

public delegate void WebPostedEventHandler(object sendor,WebPostedEventArgs e);

웹 페이지 수집 결과 이벤트 인자 형식을 정의합시다.

public class WebPostedEventArgs:EventArgs

수집 결과 이벤트 인자 형식에는 수집 결과 페이지 개체를 참조하는 멤버 필드가 필요합니다.

RawPostedPage rpp;

수집한 페이지를 가져오기 할 수 있는 속성을 제공합니다.

public PostedUrl Page
{
    get
    {
        return rpp.PostedPage;
    }
}

수집한 페이지 내부 콘텐츠에 링크 목록을 가져오기 할 수 있는 속성을 제공합니다.

public List<string> Links
{
    get
    {
        return rpp.Links;
    }
}

생성자에서는 수집한 결과 페이지 개체를 입력 인자로 받아 멤버 필드를 설정합니다.

public WebPostedEventArgs(RawPostedPage rpp)
{
    this.rpp = rpp;
}

ToString 메서드를 재정의하여 수집 결과 페이지의 타이틀을 반환합니다.

public override string ToString()
{
    return rpp.PostedPage.Title;
}

▷ WebPostedEventArgs.cs

using System;
using System.Collections.Generic;
using WSE_Core;
 
namespace WEB_Robot_Lib
{
    /// <summary>
    /// 웹 페이지 수집 완료 이벤트 핸들러
    /// </summary>
    /// <param name="sendor">이벤트를 발생을 통보한 개체</param>
    /// <param name="e">이벤트 처리에 필요한 인자</param>
    public delegate void WebPostedEventHandler(object sendor,
                                                                WebPostedEventArgs e);
    /// <summary>
    /// 웹 페이지 수집 완료 이벤트 인자
    /// </summary>
    public class WebPostedEventArgs:EventArgs
    {
        RawPostedPage rpp;

        /// <summary>
        /// 수집한 웹 페이지
        /// </summary>
        public PostedUrl Page
        {
            get
            {
                return rpp.PostedPage;
            }
        }
        /// <summary>
        /// 웹 페이지 내부의 링크 컬렉션
        /// </summary>
        public List<string> Links
        {
            get
            {
                return rpp.Links;
            }
        }

        /// <summary>
        /// 생성자
        /// </summary>
        /// <param name="rpp">수집 요청한 페이지</param>
        public WebPostedEventArgs(RawPostedPage rpp)
        {
            this.rpp = rpp;
        }

        /// <summary>
        /// 재정의
        /// </summary>
        /// <returns>수집한 페이지 제목</returns>
        public override string ToString()
        {
            return rpp.PostedPage.Title;
        }
    }
}