이벤트 핸들링

이벤트 핸들러 다루기

ProudNet의 이벤트 핸들링은 delegate 패턴으로 되어 있습니다.

클라이언트에서는 Proud.INetClientEvent 클래스를 상속받아 구현하고, 서버에서는 Proud.INetServerEvent 클래스를 상속받아 구현합니다. 구현한 클래스의 인스턴스를 만든 후 서버에서는 Proud.CNetServer.SetEventSink로, 클라이언트에서는 Proud.CNetClient.SetEventSink를 통해 연계해주어야 합니다.

class MyEvent:public INetClientEvent
{
    virtual void OnJoinServerComplete(...) override 
    { 
        // my event handler
        ...
    }
}
 
MyEvent m_myEvent;
myNetServer->SetEventSink(&m_myEvent); 

C++11을 지원하는 컴파일러를 쓰신다면,

위와 같은 클래스를 상속받는 대신 람다식을 쓰시면 더 간결한 프로그래밍을 하실 수 있습니다.

myNetServer->OnJoinServerComplete = [...](...) 
    {
        // my event handler
        ...
    };

위 과정을 통해 이벤트 콜백을 받을 수 있는 시점에 대해서는 메인 루프의 이해 를 참고하시기 바랍니다.

서버에서 발생할 수 있는 대표적인 이벤트는 '클라이언트로부터의 연결받기' 등이 있고, 클라이언트에서 발생하는 대표적인 이벤트는 '서버와의 연결 성사', 'P2P 멤버의 참여' 등이 있습니다.

반드시 Event에 대한 Log처리가 필요합니다.

기술 지원 중, Log처리를 하지않아 발생하는 원인을 발견하기 어려워 문제가 가장 많이 발생합니다. 특히 errorInfo 가 파라미터로 들어가는 함수들과 아래의 Event는 반드시 Log처리를 해주세요.

  • OnError: ProudNet 내부에서 발생되는 Error나 사용 중 문제로 인한 정보를 콜백 합니다.

  • OnWarning: 심각하진 않으나 잠재적 문제를 가지고 있는 정보를 콜백 합니다.

  • OnInformation: 내부 상황과 추적 등에 대한 정보를 콜백 합니다.

  • OnException: 내부 Exception 오류 정보를 콜백 합니다.

파라미터 errorInfo errorInfo->ToString(); 을 사용하시면 쉽게 문제에 대한 정보를 얻으실 수 있습니다.

Last updated