www.pudn.com > Win32DirectX9.rar > netconnect.h
//----------------------------------------------------------------------------- // File: NetConnect.h // // Desc: // // Copyright (C) 2000-2001 Microsoft Corporation. All Rights Reserved. //----------------------------------------------------------------------------- #ifndef NETCONNECT_H #define NETCONNECT_H #include#include #include #include //----------------------------------------------------------------------------- // Defines, structures, and error codes //----------------------------------------------------------------------------- #define DISPLAY_REFRESH_RATE 250 #define TIMERID_DISPLAY_HOSTS 1 #define TIMERID_CONNECT_COMPLETE 2 #define NCW_S_FORWARD ( (HRESULT) 0x01000001 ) // Dialog success, so go forward #define NCW_S_BACKUP ( (HRESULT) 0x01000002 ) // Dialog canceled, show previous dialog #define NCW_S_QUIT ( (HRESULT) 0x01000003 ) // Dialog quit, close app #define NCW_S_LOBBYCONNECT ( (HRESULT) 0x01000004 ) // Dialog connected from lobby, connect success enum SigningType { SIGN_NONE, SIGN_FAST, SIGN_FULL }; class CNetConnectWizard { public: CNetConnectWizard( HINSTANCE hInst, HWND hWndParent, TCHAR* strAppName, GUID* pGuidApp ); virtual ~CNetConnectWizard(); HRESULT WINAPI MessageHandler( PVOID pvUserContext, DWORD dwMessageId, PVOID pMsgBuffer ); HRESULT WINAPI LobbyMessageHandler( PVOID pvUserContext, DWORD dwMessageId, PVOID pMsgBuffer ); HRESULT Init( IDirectPlay8Peer* pDP, IDirectPlay8LobbiedApplication* pLobbiedApp ); VOID Shutdown(); HRESULT DoConnectWizard( BOOL bBackTrack ); HRESULT ConnectUsingLobbySettings(); void SetMaxPlayers( DWORD dwMaxPlayers ) { m_dwMaxPlayers = dwMaxPlayers; } void SetPlayerName( TCHAR* strPlayerName ) { _tcsncpy( m_strLocalPlayerName, strPlayerName, MAX_PATH-1 ); m_strLocalPlayerName[ MAX_PATH-1 ] = 0; } void SetSessionName( TCHAR* strSessionName ) { _tcsncpy( m_strSessionName, strSessionName, MAX_PATH-1 ); m_strSessionName[ MAX_PATH-1 ] = 0; } void SetPreferredProvider( TCHAR* strPreferredProvider ) { _tcsncpy( m_strPreferredProvider, strPreferredProvider, MAX_PATH-1 ); m_strPreferredProvider[ MAX_PATH-1 ] = 0; } void SetDefaultPort( DWORD dwDefaultPort ) { m_dwPort = dwDefaultPort; } TCHAR* GetPlayerName() { return m_strLocalPlayerName; } TCHAR* GetSessionName() { return m_strSessionName; } TCHAR* GetPreferredProvider() { return m_strPreferredProvider; } BOOL IsHostPlayer() { return m_bHostPlayer; } BOOL IsMigrateHost() { return m_bMigrateHost; } BOOL HaveConnectionSettingsFromLobby() { return m_bHaveConnectionSettingsFromLobby; } static BOOL SPRequiresPort( GUID* pSP ) { return (*pSP != CLSID_DP8SP_MODEM && *pSP != CLSID_DP8SP_SERIAL && *pSP != CLSID_DP8SP_BLUETOOTH); } protected: struct DPHostEnumInfo { DWORD dwRef; DPN_APPLICATION_DESC* pAppDesc; IDirectPlay8Address* pHostAddr; IDirectPlay8Address* pDeviceAddr; TCHAR szSession[MAX_PATH]; DWORD dwLastPollTime; BOOL bValid; DPHostEnumInfo* pNext; }; static INT_PTR CALLBACK StaticConnectionsDlgProc( HWND, UINT, WPARAM, LPARAM ); static INT_PTR CALLBACK StaticSessionsDlgProc( HWND, UINT, WPARAM, LPARAM ); static INT_PTR CALLBACK StaticCreateSessionDlgProc( HWND, UINT, WPARAM, LPARAM ); static INT_PTR CALLBACK StaticLobbyWaitDlgProc( HWND, UINT, WPARAM, LPARAM ); static INT_PTR CALLBACK StaticAddressDlgProc( HWND, UINT, WPARAM, LPARAM ); INT_PTR CALLBACK ConnectionsDlgProc( HWND, UINT, WPARAM, LPARAM ); INT_PTR CALLBACK SessionsDlgProc( HWND, UINT, WPARAM, LPARAM ); INT_PTR CALLBACK CreateSessionDlgProc( HWND, UINT, WPARAM, LPARAM ); INT_PTR CALLBACK LobbyWaitDlgProc( HWND, UINT, WPARAM, LPARAM ); INT_PTR CALLBACK AddressDlgProc( HWND, UINT, WPARAM, LPARAM ); HRESULT ConnectionsDlgFillListBox( HWND hDlg ); HRESULT ConnectionsDlgOnOK( HWND hDlg ); VOID ConnectionsDlgCleanup( HWND hDlg ); VOID SessionsDlgInitListbox( HWND hDlg ); HRESULT SessionsDlgEnumHosts( HWND hDlg ); VOID SessionsDlgStopEnumHosts( HWND hDlg ); VOID SessionsDlgFinalizeEnumHosts( HWND hDlg ); HRESULT SessionsDlgNoteEnumResponse( PDPNMSG_ENUM_HOSTS_RESPONSE pEnumHostsResponse ); VOID SessionsDlgExpireOldHostEnums(); HRESULT SessionsDlgDisplayEnumList( HWND hDlg ); HRESULT SessionsDlgJoinGame( HWND hDlg ); HRESULT SessionsDlgCreateGame( HWND hDlg ); VOID SessionsDlgEnumListCleanup(); IDirectPlay8Peer* m_pDP; IDirectPlay8LobbiedApplication* m_pLobbiedApp; CRITICAL_SECTION m_csHostEnum; GUID m_guidApp; HRESULT m_hrDialog; HWND m_hDlg; HINSTANCE m_hInst; HWND m_hWndParent; DWORD m_dwMaxPlayers; DWORD m_dwPort; TCHAR m_strAppName[MAX_PATH]; TCHAR m_strPreferredProvider[MAX_PATH]; TCHAR m_strSessionName[MAX_PATH]; TCHAR m_strLocalPlayerName[MAX_PATH]; TCHAR m_strHostname[MAX_PATH]; BOOL m_bSearchingForSessions; BOOL m_bMigrateHost; BOOL m_bUseDPNSVR; SigningType m_eSigningType; DPHostEnumInfo m_DPHostEnumHead; BOOL m_bEnumListChanged; DPNHANDLE m_hEnumAsyncOp; BOOL m_bHostPlayer; DWORD m_dwEnumHostExpireInterval; BOOL m_bConnecting; DPNHANDLE m_hConnectAsyncOp; HANDLE m_hConnectCompleteEvent; HANDLE m_hLobbyConnectionEvent; HRESULT m_hrConnectComplete; BOOL m_bHaveConnectionSettingsFromLobby; DPNHANDLE m_hLobbyClient; GUID m_guidSP; }; #endif // NETCONNECT_H