Microsoft DirectX 8.1 (C++)

A Sample Lobby Client Message Handler

The following code is a simplified version of the message handler from the SDK's LobbyClient sample. Error handling code has been removed for clarity. See the sample for a complete version.

HRESULT WINAPI DirectPlayLobbyMessageHandler( PVOID pvUserContext, 
                                              DWORD dwMessageId, 
                                              PVOID pMsgBuffer )
{
  switch( dwMessageId )
  {
    case DPL_MSGID_DISCONNECT:
    {
      PDPL_MESSAGE_DISCONNECT pDisconnectMsg;
      pDisconnectMsg = (PDPL_MESSAGE_DISCONNECT)pMsgBuffer;

      // Free any data associated with the application and
      // remove the connection from the list.
      break;
    }
    case DPL_MSGID_RECEIVE:
    {
      PDPL_MESSAGE_RECEIVE pReceiveMsg;
      pReceiveMsg = (PDPL_MESSAGE_RECEIVE)pMsgBuffer;

      // The lobby application sent data. Process the data and
      // respond appropriately.
      break;
    }
    case DPL_MSGID_SESSION_STATUS:
    {
      PDPL_MESSAGE_SESSION_STATUS pStatusMsg;
      pStatusMsg = (PDPL_MESSAGE_SESSION_STATUS)pMsgBuffer;

      switch( pStatusMsg->dwStatus )
      {
        case DPLSESSION_CONNECTED: //Session connected.
          break;
        case DPLSESSION_COULDNOTCONNECT: //Session could not connect.
          break;
        case DPLSESSION_DISCONNECTED: //Session disconnected.
          break;
        case DPLSESSION_TERMINATED: //Session terminated.
          break;
        case DPLSESSION_HOSTMIGRATED: //Host migrated.
          break;
        case DPLSESSION_HOSTMIGRATEDHERE: //Host migrated here.
          break;
      }
      case DPL_MSGID_CONNECTION_SETTINGS:
      {
        PDPL_MESSAGE_CONNECTION_SETTINGS pConnectionStatusMsg;
        pConnectionStatusMsg = (PDPL_MESSAGE_CONNECTION_SETTINGS)pMsgBuffer;
        // The application has changed the connection settings.  
        break;
      }
  }
  return S_OK;
}