호스트간 RMI를 주고 받는 방법에 대해서는 13. Communication between hosts에 설명되어 있습니다. 이 방법에 따라, 호스트간 RMI를 주고 받는 루틴을 추가해 봅시다.
서버에서는 특정 키를 누르면 P2P 그룹의 모든 멤버들에게 메시지를 Multicast하게 해봅시다.
if (userInput == "2") { // send an RMI message to every client. g_S2CProxy.SystemChat(g_groupHostID, RmiContext::ReliableSend, _PNT("Hello~~~!")); }
서버에서 RMI를 받으면 클라이언트에게 RMI로 응답하게 해봅시다.
DEFRMI_C2S_Chat(C2SStub) { cout << "[Server] chat message received :"; cout << " a=" << a; cout << " b=" << b; cout << " c=" << c; cout << endl; // Echo chatting message which received from server to client. g_S2CProxy.ShowChat(remote, RmiContext::ReliableSend, a, b + 1, c + 1); return true; }
클라이언트에서 P2P 멤버가 추가됐다는 이벤트를 받으면 P2P 멤버에게 환영 메시지를 보내게 해봅시다.
// set a routine for P2P member join (P2P available) netClient->OnP2PMemberJoin = [&](HostID memberHostID, HostID groupHostID, int memberCount, const ByteArray &customField) { g_C2CProxy.P2PChat(memberHostID, RmiContext::ReliableSend, _PNT("Welcome!"), 5, 7.f); };
클라이언트가 서버에 접속을 성공하면 즉시 인사 메시지를 보내게 해봅시다.
netClient->OnJoinServerComplete = [&](ErrorInfo *info, const ByteArray &replyFromServer) { if (info->m_errorType == ErrorType_Ok) { // send a message. g_C2SProxy.Chat(HostID_Server, // send destination RmiContext::ReliableSend, // how to send _PNT("Hello ProudNet~!!!."), 333, 22.33f); // user defined parameters } };