7.Exchange RMI among hosts

넷텐션

호스트간 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
    }
};