/// <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);