인프런 커뮤니티 질문&답변

wocl00님의 프로필 이미지
wocl00

작성한 질문수

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

Session #4

OnAcceptCompleted 코드에서 질문이 있습니다.

작성

·

330

0

1. Action.Invoke(), Func.Invoke() 

Invoke() 함수가 많이 등장하는데 MSDN을 살펴봐도 딱히 나오는 내용이 없더군요. 

느낌상 <T> 제네릭 객체를 반환하는 것 같은데 어떤 기능을 하는지 잘 모르겠습니다. 

 

2. 다형성에 관한 질문 

OnAccpetCompleted에서 

if (args.SocketError == SocketError.Success)

            {

                Session session = _sessionFactory.Invoke(); 

                session.Start(args.AcceptSocket);

                session.OnConnected(args.AcceptSocket.RemoteEndPoint);

            }

 

라는 코드가 있습니다. 

여기서 _sessionFactory에 ( ) => { return new GameSession( ) } 람다함수가 들어있습니다. 

 

_sessionFactory는 Func<Session> 이므로 람다함수가 반환한 GameSession이  Session 으로 형변환이 될 것 같습니다. 

 

그리고 _sessionFactory.Invoke( )를 하면서  Session 객체를 반환할 것 같습니다. <-- 1번 질문

 

그런데 여기서 반환된 Session 객체가 OnConnected라는 메소드를 가질 수 있다는게 잘 이해가 안갑니다. 

_sessionFactory에 람다함수를 연결하는 과정에서 GameSesison이 Session을 형변환을 했으면, GameSession에 Override된 OnConnected를 쓸 수 없는거 아닌가요? 

 

어떤 부분이 틀렸는지 알려주시면 감사하겠습니다.

 

답변 1

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

1.
delegate 문법입니다.
delegate에 대해서 조사해보시기 바랍니다.

2.
매우 중요한 부분인데요.
virtual (가상) 함수에 대해 복습을 해보시기 바랍니다.
애당초 OnConnected는 abstract 함수이고 Session에 배치되어 있습니다.

wocl00님의 프로필 이미지
wocl00

작성한 질문수

질문하기