728x90

 

목표

 

이벤트 이해

 

이벤트 전달용 데이터 클래스 자료형 구현

더보기
/// <summary>
/// [이벤트 전달용 데이터 클래스]
/// 이벤트 발생 시, 추가 정보를 함께 전달하기 위해 사용하는 클래스입니다.
/// 
/// C#의 모든 이벤트 인자 클래스는 EventArgs를 상속하는 것이 규칙입니다.
/// (ex. MouseEventArgs, KeyEventArgs 등)
/// </summary>
public class CustomEventArgs : EventArgs
{
    /// <summary>
    /// [이벤트 관련 정보]
    /// 새로 연결된 클라이언트의 IP 또는 식별 정보를 저장합니다.
    /// </summary>
    public string NewClientInfo { get; set; }

    /// <summary>
    /// [생성자(Constructor)]
    /// 이벤트 발생 시 전달할 데이터를 초기화합니다.
    /// </summary>
    /// <param name="_NewClientInfo">새로 연결된 클라이언트의 정보(IP/Port 등)</param>
    public CustomEventArgs(string _NewClientInfo)
    {
        NewClientInfo = _NewClientInfo;
    }
}


이벤트 정의 구현

더보기
// [1] 이벤트 핸들러를 만듭니다.
// - public: 외부에서도 이 이벤트에 구독 가능(+=, -= 가능)
// - event: 외부에서 직접 실행(Invoke)은 불가능 (캡슐화)
public event EventHandler<CustomEventArgs>? ClientConnectedEvent;

 

 

// [2] 이벤트 발생 메서드 
public void OnRaiseClientConnectEvent(CustomEventArgs e)
{
    // [3] ?.Invoke() : 널 검사와 호출을 한 줄로 처리
    // (ClientConnectedEvent가 null이면 자동으로 아무 일도 하지 않음)
    ClientConnectedEvent?.Invoke(this, e);
}


이벤트 실행 구현

더보기
// [이벤트 발생 시 전달할 데이터 생성]
string clientInfo = client.Client.RemoteEndPoint?.ToString() ?? "Unknown";
CustomEventArgs eventArgs = new CustomEventArgs(clientInfo);

// [이벤트 발생 메서드 호출]
OnRaiseClientConnectedEvent(eventArgs);

 

폼에 적용하기

더보기
// 폼이 로드될 때 이벤트 핸들러를 등록합니다.
void HandleClientConnect(object? sender, CustomEventArgs e)
{
    MessageBox.Show($"클라이언트가 접속했습니다. {e.NewClientInfo}");
}

 

 

// 폼이 로드될 때 이벤트 핸들러를 등록합니다.
mServer.ClientConnectedEvent += HandleClientConnect;

 

실행 테스트(1)

 

폼에 적용하기(2)


실행 테스트(2)