🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

Connect 함수에 대해 질문이 있습니다.

22.02.15 16:29 작성 조회수 190

0

안녕하세요 영상 4분쯤에 나오는 RegisterConnect 에 대해 질문이 생겨서 남겨봅니다.

 

먼저 제가 이해한 바를 정리해 보면

클라이언트 -> 서버 연결의 경우에는,

DummyClient 입장에서 서버에 붙어야 하기에 RegisterConnect를 호출해 주었고

Server입장에서는 Listener에서 ProcessConnect를 바로 호출해 준다고 이해했습니다.

 

이전에 서버 -> 서버간의 연결이 분산 서버 환경에서 일어날 수 있다고 말씀주셨고 영상 4분쯤(RegisterConnect 함수 제작 중)에 서버와 서버를 연결할 경우, 상대방이 나한태 붙는 개념이라, ServiceType이 Client 인 경우에만 RegisterConnect 를 호출할 수 있다 설명해 주셨는데 이 부분이 잘 이해가 가지 않습니다.

 

만약 서버 -> 서버의 연결의 필요해 지는 경우에는,

서버입장에서 ClientService 를 생성해서 대상 서버에 RegisterConnect를 호출해야 하는 건가요?

아니면 따로 추가 함수 제작이 필요한 건가요?

 

==========================

 

죄송합니다 추가로 질문 하나 더 남겨봅니다.

 

저희가 사용하고 있는 IocpEvent는 OVERLAPPED를 상속받아

 

메모리 처음 시작 부분에 OVERLAPPED 구조체 정보가 들어있어서 IocpEvent <-> OVERLAPPED 간의 타입캐스팅이 가능했었는데,

 

이런 방식의 기믹은 뭐라고 하며, virtual 함수가 없는 이상 언제나 안전하게 사용할 수 있는 방법인가요?

 

https://stackoverflow.com/questions/22404423/c-pod-struct-inheritance-are-there-any-guarantees-about-the-memory-layout-of

 

관련 내용을 찾다보니 메모리 레이아웃이 보장되지 않는다는 내용이 보여서 여쭤봅니다.

답변 1

답변을 작성해보세요.

2

서버입장에서 ClientService 를 생성해서 대상 서버에 RegisterConnect를 호출해야 하는 건가요?

네 그렇습니다. 서버끼리 통신하더라도 그 중 하나는 클라의 역할을 하게 되겠죠.

메모리 처음 시작 부분에 OVERLAPPED 구조체 정보가 들어있어서 IocpEvent <-> OVERLAPPED 간의 타입캐스팅이 가능했었는데,

제 환경에선 문제가 없었지만
테스트한 환경에서 문제가 된다면
더 직관적인 대안은
상속구조를 하지 않고 모든 애들을 커버하는 struct를 만든 뒤,
Overlapped 멤버변수를 넘기는겁니다.

ex)

struct OverlappedEx
{
 ... 이벤트 종류 구분 등등
 Overlapped overlapped;
}

답변 감사합니다!

채널톡 아이콘