소스는 아래와 같습니다. 답변해주신 대로
m_RequestHandler .invoke(this, EventArgs.Empty)
혹은 NewRequestReceived.invoke(this, EventArgs.Empty);
하려는데 파라미터 쪽에서 오류가 나는 듯합니다.
일단 두 번째 인자 EventArgs.Empty는 자동 생성으로 잘 나오는데 밑줄이 그어지더군요 제가 인자 등을 잘못 연결한 거 같습니다.
아래와 같이 메서드를 만들어서
사용해 보려고 했는데 역시나 this, e에서 밑줄이 나오더라고요 ㅠㅠ
에러 메시지 보니깐
제네릭 파라미터와 매칭이 안되는 듯합니다… OnRecevied가 <,> 로 구성돼있어서 그런듯합니다.
그 파라 미터들을 강제로 넣어줘야 하나요?
protected virtual void OnDo(EventArgs e)
{
m_RequestHandler.Invoke(this, e);
}
웹 개발상에서는 이벤트가 발생했다는 것은
마우스, 키보드 등의 변화를 감지했을 때 발생하는 것이잖아요.
여기 OnReceived 란 이벤트 함수는 델리 게이 터를 통해 이벤트에 등록을 했는데 어떻게 써 이벤트를
발생할 수가 있는 것인가요?
이 소켓 소스 관련해서 Server에서 Connection 함수 등에서
무한 루프를 돌면서 해당 OnReceived(?) 을 실행하는 것인가요?
소스
namespace AccAuthService.Controller
{
public class ControllerServer: AppServer<NetworkSession, ControllerPacket>
{
// RequestHandler는 delegate 임
private RequestHandler<TAppSession, TRequestInfo> m_RequestHandler;
public virtual event RequestHandler<TAppSession, TRequestInfo> NewRequestReceived
{
add { m_RequestHandler += value; }
remove { m_RequestHandler -= value; }
}
}
}
namespace AccAuthService.Controller
{
public class ControllerServer: AppServer<NetworkSession, ControllerPacket>
{
public ControllerServer()
: base(new ControllerReceiveFilterFactory())
this.NewRequestReceived += this.OnReceived;
}
private void OnReceived(NetworkSession session, ControllerPacket requestInfo)
{
try
{
if (requestInfo == null)
{
session.Close(CloseReason.ProtocolError);
}
else
{
IControllerService service = IOCContainer
.FindService<IControllerService>(requestInfo.TargetServiceName);
service.Receive(requestInfo, session);
}
}
catch (Exception ee) ~~~
}
}
}