Tag: <span>C# 대리자</span>

*동영상 강의에서는 라이브러리로 제작합니다.*

원격 제어 요청을 수신하여 수락 혹은 거절하는 SetupServer에서는 상대측에서 원격 제어 요청이 온 시점을 알아야 합니다. 이를 위해 이벤트 처리를 할 수 있게 대리자와 이벤트 인자 형식을 정의합시다.

이벤트 처리에 사용할 인자는 EventArgs 클래스를 기반으로 파생 클래스로 정의하는 것을 권해요.

public class RecvRCInfoEventArgs : EventArgs
{

누가 요청했는지 접근할 수 있게 IPEndPoint 속성을 제공합시다.

    public IPEndPoint IPEndPoint
    {
        get; 

설정자는 내부에서만 접근할 수 있게 private으로 접근 지정하세요.

        private set; 
    }

IP 주소를 문자열 형태로 변환하여 제공하여 사용하는 곳에서 쉽게 사용할 수 있게 합시다.

    public string IPAddressStr
    {
        get 
        { 
            return IPEndPoint.Address.ToString(); 
        }
    }

포트 번호도 속성으로 제공합시다.

    public int Port
    {
        get 
        { 
            return IPEndPoint.Port; 
        }
    }

생성자에서는 EndPoint를 인자로 받아 속성을 설정하세요.

    internal RecvRCInfoEventArgs(EndPoint RemoteEndPoint)
    {

as 연산은 하향 캐스팅에 사용하는 참조 연산입니다.

        IPEndPoint = RemoteEndPoint as IPEndPoint;
    }
}

이벤트 처리를 위해 대리자 형식을 정의하세요.

public delegate void RecvRCInfoEventHandler(object sender, RecvRCInfoEventArgs e);

다음은 이번에 작성한 소스 코드입니다.

//RecvRCInfoEventArgs.cs
using System;
using System.Net;

namespace 원격제어기
{
    /// <summary>
    /// 원격 제어 요청 수신 이벤트 인자 클래스
    /// </summary>
    public class RecvRCInfoEventArgs : EventArgs
    {
        /// <summary>
        /// IP 단말 정보 - 가져오기
        /// </summary>
        public IPEndPoint IPEndPoint
        {
            get; 
            private set; 
        }
        /// <summary>
        /// IP 주소 문자열 - 가져오기
        /// </summary>
        public string IPAddressStr
        {
            get 
            { 
                return IPEndPoint.Address.ToString(); 
            }
        }
        /// <summary>
        /// 포트 - 가져오기
        /// </summary>
        public int Port
        {
            get 
            { 
                return IPEndPoint.Port; 
            }
        }
        /// <summary>
        /// 생성자
        /// </summary>
        /// <param name="RemoteEndPoint">상대측 단말 정보</param>
        internal RecvRCInfoEventArgs(EndPoint RemoteEndPoint)
        {
            IPEndPoint = RemoteEndPoint as IPEndPoint;
        }
    }
    /// <summary>
    /// 원격 제어 요청 수신 이벤트를 정의하기 위한 대리자
    /// </summary>
    /// <param name="sender">이벤트 통보 개체</param>
    /// <param name="e">이벤트 처리 인자</param>
    public delegate void RecvRCInfoEventHandler(object sender, RecvRCInfoEventArgs e);
}