기존 게임은 프라우드넷 서버를 사용하여 클라와 서버 간의 게임 정보 데이터만 통신하고 있었는데요. 그 서버를 릴레이 서버 삼아서, 특정 모드로 들어 갔을 때 P2P 그룹핑을 해주고, P2P 홀펀칭이 될 때까지 기다린 후에 C2C 프로토콜만 사용해서 해당 모드를 진행 하도록 구현 할 생각입니다.
기존 서버와 클라간의 통신은 Tcp 소켓으로 reliable send 방식으로 sendusermessage 메서드만 사용해서 서버와 클라의 송수신 처리는 따로 구현해서 사용하고 있구요. 기존 프로젝트를 건네 받은 것이라 전체 내용은 모릅니다만 거의 맞는 것 같습니다.
현재 구현하려고 하는 부분은 이 방식으로 특정 패킷을 sendmessage 로 보내면, 서버에서 Createp2pgroup
혹은 joinp2pgroup
처리를 해주고, 클라이언트는 relay state가 바뀔 때까지 잠시 대기 한 후 relaystatehandler
를 통해 state가 바뀌면, C2C proxy, stub를 각각 client에 부착해줄 예정입니다.
즉 P2P 상태에서만 Rmi 프로토콜을 사용할 예정인데, 서버를 원격으로 실행시키고 로컬에서 클라이언트 2개를 띄워서 실험해보았을 때 relaystate 콜백이 이루어지지 않습니다. netserver.enablelog
를 살펴보니, 계속 주기적으로 홀 펀칭 시도는 하고 있는 것 같은데 실패 이유에 대해서는 짐작하기가 어려워서 질문 드립니다.