inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

Listener

Invoke의 역할이 이해가 가지 않습니다.

해결된 질문

392

가나파이

작성한 질문수 52

2

_onAcceptHandler.Invoke(args.AcceptSocket); 

이 코드가 어떤 일을 수행하는 것인지, 왜 필요한 것인지 잘 이해가 가지 않습니다... 

_onAcceptHandler가 args.AcceptSocket을 수행하도록 하는 것인가요?

network C# unity

답변 1

3

Rookiss

우선 Action과 delegate 문법을 잘 이해하고 계신 것이 맞을까요?
위 부분은 C++로 치면 함수 포인터, 혹은 std::function과 유사합니다.
기본적으로 멤버 변수로는 int, float, bool 같은 데이터를 담는게 일반적이지만,
경우에 따라 '함수' 그 자체도 인자로 받아주면 굉장히 유용한 경우가 많습니다.
예를 들어서 클라 연결이 들어오면, [    ] 함수를 호출 해주겠다!
라는 우리만의 규칙을 정한 다음, [    ] 함수만 바꿔치기 할 수 있다면
[클라가 연결이 들어올 때 어떻게 처리할 것인지] 라는
서버 정책을 나중에 정할 수 있게 됩니다.
즉 [   ] 함수를 인자로 받아서, 그 부분을 호출하는 식으로 만들어주면 되는 것이고
이게 바로 콜백 함수의 장점이자 _onAcceptHandler의 역할입니다.


즉, 위와 같이 클라가 연결하면 호출할 함수를 인자로 받아주는 것이죠.
굳이 ServerCore에서 바로 처리하지 않고,
처리할 함수를 따로 받아주는 이유는
나중에 컨텐츠 단에서 이것을 유연하게 정할 수 있도록 하기 위함입니다.

Action<Socket> 으로 변수를 만들어 주면,
사실상 void를 리턴하고 Socket을 인자로 받아주는 그 어떤 함수도 호환이 됩니다.

void Test(Socket socket);  // < OK
void Hello(Socket socket);  // < OK
void Sorry(); // << NO ! 함수 시그니처가 다름

참고로 C++로 치면 std::function<void(Socket)> 혹은 void(*)(Socket)에 해당합니다.

1

가나파이

그러면

_onAcceptHandler.Invoke(args.AcceptSocket); 

이 부분은 accept된 클라이언트가 있으면 앞에 핸들러에 등록한 함수들을 실행하는 부분인 것이죠?

1

Rookiss

네 맞습니다!

1

가나파이

답변 정말 감사드립니다 ㅎㅎ 

TLS 질문드립니다.

0

61

2

SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.

0

61

2

Unity Span

0

88

2

XML, Dll 차이점

0

120

2

Session 질문입니다

0

87

1

Write Read 커서 키워드

0

82

1

더미 클라이언트 수에 따른 OnDisconnect 발생

0

79

2

네트워크 Send 전담 스레드 배치

0

106

2

UnhandledException 으로 서버 터지는 경우

0

96

2

컨텐츠 단, 엔진 단

0

113

1

질문 있습니다

0

84

2

C# 게임서버 3D MMORPG

0

156

2

유니티6 버전

0

101

2

receive하는 부분과 send하는 부분의 차이

0

142

2

커서의 위치의 중요성

0

107

2

C++ 전혀 모르는데 C# 서버

0

172

2

강의에 질문이 있습니다

0

90

2

멀티스레드 이해도 질문

0

100

1

500 vs 500

0

134

3

OnAcceptHandler 액션 함수

0

65

1

이 정도 서버의 객관적인 수준이 궁금합니다.

0

197

2

36. Serialization #3 에서 string (name) 코드 수정 질문

0

84

2

외부 컴퓨터와의 통신 방법이 궁금합니다

0

109

1

스핀락 질문.

0

113

2