//----------------------------------------------------------------------------- // // Sample Name: LobbyClient Sample // // Copyright (c) 1999-2001 Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- Description =========== LobbyClient is a simple lobby client. It displays all registered DirectPlay applications on the local system. It allows the user to launch one or more of these applications using a chosen service provider. A launched lobbied application may be told to either join or host a game. Path ==== Source: DXSDK\Samples\Multimedia\DirectPlay\LobbyClient Executable: DXSDK\Samples\Multimedia\DirectPlay\Bin User's Guide ============ Choose launch settings from dialog, and click "Launch App". The lobby client will launch the app selected based on the settings in the UI. The active connections list will display the handle to all the current lobbied applications. Clicking on "Send Message" will send a lobby message to the lobbied application. This done mainly for demonstration purposes. A more complex lobby client may want to use this functionality in a more meaningful way by passing a message that the lobbied application responds to. Programming Notes ================= * Initialize DirectPlay. See InitDirectPlay() 1. Init COM with CoInitialize() 2. Create a IIDirectPlay8Peer with CoCreateInstance() 3. Call IDirectPlay8Peer::Initialize to tell the interface about our message handler 4. Create a IDirectPlay8LobbyClient with CoCreateInstance() 5. Call IDirectPlay8LobbyClient::Initialize to tell the interface about our lobby message handler * Initialize dialog box. See OnInitDialog() 1. Enumerate the registered lobbied applications and display them in the dialog listbox. See EnumRegisteredApplications() 2. Enumerate the DirectPlay service providers and display them in the dialog listbox. See EnumServiceProviders() 3. Whenever a new service provider is selected (and upon init) then enumerate the service provider's adapters. See EnumAdapters(). * When "Launch App" button is clicked. See LaunchApp() 1. Fill out a DPL_CONNECT_INFO struct. This is complex since it contains the host and device addresses as well as the DPN_APPLICATION_DESC. See LaunchApp() and AllocAndInitConnectSettings(). 2. Call IDirectPlay8LobbyClient::ConnectApplication() passing in the DPL_CONNECT_INFO struct. 3. Free the DPL_CONNECT_INFO struct. This is also complex since this struct has a number of DPlay addresses. See FreeConnectSettings(). * Upon DirectPlay Lobby messages. See DirectPlayLobbyMessageHandler() - Upon DPL_MSGID_DISCONNECT: pDisconnectMsg->hDisconnectId will contain the handle of the lobbied application that was disconnected, and pDisconnectMsg->hrReason will be the reason. This simple sample just pops up a message box. - Upon DPL_MSGID_RECEIVE: The lobbied application sent the client data. This simple sample doesn't respond to any message. - Upon DPL_MSGID_SESSION_STATUS: A lobbied application has changed its status. pStatusMsg->hSender will one of several predefined status codes. This simple sample just updated the UI showing that the lobby status has updated, however more complex lobby clients many want to take action. - Upon DPL_MSGID_CONNECTION_SETTINGS: A lobbied application has changed its connection settings. This simple lobby client doesn't take any action however, more complex clients may want to take action. * When "Send Message" is clicked. See SendMsgToApp() Call IDirectPlay8LobbyClient::Send() with the handle of the lobbied application to send the message to, and the buffer to send. * When "Disconnect" is clicked. See DisconnectFromApp() Call IDirectPlay8LobbyClient::ReleaseApplication() with the handle of lobbied application to disconnect from.