원격 제어 프로그램 8. 원격 제어 – 화면 수신 이벤트

이미지 수신 서버에서는 이미지를 수신할 때마다 폼에 이를 알려주어야 합니다. 이 부분을 위해 이벤트 처리를 할 것입니다. 먼저 이미지를 수신하였을 때 이벤트를 처리하기 위해 대리자와 이벤트 인자 클래스를 정의합시다. RecvImageEventArgs 이름의 클래스를 추가하세요.

public class RecvImageEventArgs : EventArgs
{

상대 IPEndPoint를 가져오기 할 수 있는 속성을 제공합시다.

    public IPEndPoint IPEndPoint
    {
        get;
        private set;
    }

상대측 IP 주소 개체와 IP 주소 문자열과 포트 정보를 가져오기 할 수 있는 속성도 제공합시다.

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

이미지 개체와 이미지 크기에 관한 정보도 가져오기 할 수 있는 속성을 제공합시다.

    public Image Image
    {
        get;
        private set;
    }
    public Size Size
    {
        get
        {
            return Image.Size;
        }
    }
    public int Width
    {
        get
        {
            return Image.Width;
        }
    }
    public int Height
    {
        get
        {
            return Image.Height;
        }
    }

생성자에서는 상대 IPEndPoint 정보와 이미지 개체를 입력 인자로 받아 속성을 설정합니다.

    internal RecvImageEventArgs(IPEndPoint remote_iep, Image image)
    {
        IPEndPoint = remote_iep;
        Image = image;
    }

ToString 메서드를 재정의하여 상대측 IP 정보와 이미지의 폭과 높이를 문자열로 형성하여 제공합시다.

    public override string ToString()
    {
        return string.Format("IP:{0} width:{1} height:{1}", IPAddressStr, Width, Height);
    }
}

이미지를 수신할 때 처리를 위한 대리자를 정의합시다.

public delegate void RecvImageEventHandler(object sender, RecvImageEventArgs e);

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

//RecvImageEventArgs.cs
using System;
using System.Net;
using System.Drawing;

namespace 원격제어기
{
    /// <summary>
    /// 이미지 수신 이벤트 인자 클래스
    /// </summary>
    public class RecvImageEventArgs : EventArgs
    {
        /// <summary>
        /// IP 단말 - 가져오기
        /// </summary>
        public IPEndPoint IPEndPoint
        {
            get;
            private set;
        }

        /// <summary>
        /// IP 주소 - 가져오기
        /// </summary>
        public IPAddress IPAddress
        {
            get
            {
                return IPEndPoint.Address;
            }
        }

        /// <summary>
        /// IP 주소 문자열 - 가져오기
        /// </summary>
        public string IPAddressStr
        {
            get
            {
                return IPAddress.ToString();
            }
        }
        /// <summary>
        /// 포트 - 가져오기
        /// </summary>
        public int Port
        {
            get
            {
                return IPEndPoint.Port;
            }
        }

        /// <summary>
        /// 이미지 - 가져오기
        /// </summary>
        public Image Image
        {
            get;
            private set;
        }

        /// <summary>
        /// 이미지 크기 - 가져오기
        /// </summary>
        public Size Size
        {
            get
            {
                return Image.Size;
            }
        }

        /// <summary>
        /// 이미지 폭 - 가져오기
        /// </summary>
        public int Width
        {
            get
            {
                return Image.Width;
            }
        }

        /// <summary>
        /// 이미지 높이 - 가져오기
        /// </summary>
        public int Height
        {
            get
            {
                return Image.Height;
            }
        }
        
        internal RecvImageEventArgs(IPEndPoint remote_iep, Image image)
        {
            IPEndPoint = remote_iep;
            Image = image;
        }

        /// <summary>
        /// ToString 메서드
        /// </summary>
        /// <returns>IP주소 및 이미지 크기를 문자열로 반환</returns>
        public override string ToString()
        {
            return string.Format("IP:{0} width:{1} height:{1}", 
                                  IPAddressStr, Width, Height);
        }
    }

    /// <summary>
    /// 이미지 수신 처리를 위한 대리자
    /// </summary>
    /// <param name="sender">이벤트 통보 개체(게시자)</param>
    /// <param name="e">이벤트 처리 인자</param>
    public delegate void RecvImageEventHandler(object sender, RecvImageEventArgs e);
}