亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? sessioninfo.cpp

?? VC游戲編程基礎(chǔ)
?? CPP
?? 第 1 頁 / 共 5 頁
字號(hào):
//-----------------------------------------------------------------------------
// File: SessionInfo.cpp
//
// Desc: Implemenation for the CSessionInfo utility class. This utility stores
//       player, group, and message information gathered from the application's
//       DirectPlay message handler, and provides a dialog UI to display the
//       data.
//
//       In order to use this class, simply create an instance using a
//       pointer to the DirectPlay Peer, Client, or Server interface your 
//       application uses. Add a call to the MessageHandler member function at 
//       the beginning of your application's message handler, and call 
//       ShowDialog to launch the UI. 
//
//       This class supports multiple concurrent modeless dialogs to help with
//       debugging an application during runtime.  
//
// Copyright (C) Microsoft Corporation. All Rights Reserved.
//-----------------------------------------------------------------------------
#include "sessioninfo.h"


// Global variables
CSessionInfo* g_pSI = NULL;    // Global instance pointer
 
// Custom fonts
#ifdef UNDER_CE
LOGFONT g_lfName =       { 20, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, VARIABLE_PITCH | FF_SWISS, TEXT("MS Sans Serif") };
LOGFONT g_lfConnection = { 14, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FIXED_PITCH | FF_MODERN, TEXT("Courier New") };
#else
LOGFONT g_lfName =       { 24, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_TT_ONLY_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, VARIABLE_PITCH | FF_SWISS, TEXT("MS Sans Serif") };
LOGFONT g_lfConnection = { 14, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FIXED_PITCH | FF_MODERN, TEXT("Courier New") };
#endif



//-----------------------------------------------------------------------------
// Name: CSIGroup()
// Desc: Constructor
//-----------------------------------------------------------------------------
CSIGroup::CSIGroup( DPNID dpnid )
{
    id = dpnid;
    lstrcpy( strName, TEXT("") );
    pMembers = new CArrayList( AL_VALUE, sizeof(DPNID) );
}




//-----------------------------------------------------------------------------
// Name: ~CSIGroup()
// Desc: Destructor
//-----------------------------------------------------------------------------
CSIGroup::~CSIGroup()
{
    SAFE_DELETE( pMembers );
}




//-----------------------------------------------------------------------------
// Name: CSIPlayer()
// Desc: Constructor
//-----------------------------------------------------------------------------
CSIPlayer::CSIPlayer( DPNID dpnid ) 
{
    id = dpnid;
    bIsHost = FALSE;
    lstrcpy( strName, TEXT("") );
    lstrcpy( strURL, TEXT("") );
}



//-----------------------------------------------------------------------------
// Name: AddMember()
// Desc: Adds the given player ID to the list of member players in this group
//-----------------------------------------------------------------------------
HRESULT CSIGroup::AddMember( DPNID id )
{
    // Check to see if this Member is already present
    if( IsMember( id ) )
        return S_OK;

    // Add the new player id
    return pMembers->Add( &id );
}




//-----------------------------------------------------------------------------
// Name: RemoveMember
// Desc: Removes the given player ID from the list of member players in this
//       group
//-----------------------------------------------------------------------------
HRESULT CSIGroup::RemoveMember( DPNID id )
{
    // Find the Member
    for( UINT i=0; i < pMembers->Count(); i++ )
    {
        DPNID* pID = (DPNID*) pMembers->GetPtr( i );
    
        // Member found
        if( id == *pID )
        {
            // Remove the id and return
            pMembers->Remove( i );
            return S_OK;
        }
    }

    // Not found
    return E_FAIL;
}




//-----------------------------------------------------------------------------
// Name: CSessionInfo()
// Desc: Constructor
//-----------------------------------------------------------------------------
CSessionInfo::CSessionInfo( IDirectPlay8Peer* pPeer ) 
{
    Initialize();
  
    m_eType         = PEER;
    m_pPeer         = pPeer;
    
    m_pPeer->AddRef();
}




//-----------------------------------------------------------------------------
// Name: CSessionInfo()
// Desc: Constructor
//-----------------------------------------------------------------------------
CSessionInfo::CSessionInfo( IDirectPlay8Client* pClient ) 
{
    Initialize();

    m_eType        = CLIENT;
    m_pClient      = pClient;
    
    m_pClient->AddRef();
}




//-----------------------------------------------------------------------------
// Name: CSessionInfo()
// Desc: Constructor
//-----------------------------------------------------------------------------
CSessionInfo::CSessionInfo( IDirectPlay8Server* pServer ) 
{
    Initialize();

    m_eType         = SERVER;
    m_pServer       = pServer;
    
    m_pServer->AddRef();
}




//-----------------------------------------------------------------------------
// Name: Initialize()
// Desc: Performs common initialization for all connection types
//-----------------------------------------------------------------------------
VOID CSessionInfo::Initialize()
{
    g_pSI   = this;
    m_pPlayers       = new CArrayList( AL_REFERENCE );
    m_pGroups        = new CArrayList( AL_REFERENCE );

    m_eType         = INVALID;
    m_pPeer         = NULL;
    m_pClient       = NULL;
    m_pServer       = NULL;

    m_dpnidLocal    = 0;
    
    m_hDlg          = NULL;
    m_hDlgParent    = NULL;
    m_hDlgPlayers   = NULL;
    m_hDlgMessages  = NULL;
    m_hDlgThread    = NULL;

    // Load custom fonts and resources
#ifndef UNDER_CE 
    HMODULE hShellLib = LoadLibraryEx( TEXT("Shell32.dll"), NULL, LOAD_LIBRARY_AS_DATAFILE );
    if( hShellLib )
    {
        m_hPlayerIcon = (HICON) LoadImage( hShellLib, MAKEINTRESOURCE(18),  
                                           IMAGE_ICON, 24, 24, LR_LOADTRANSPARENT);
        m_hGroupIcon =  (HICON) LoadImage( hShellLib, MAKEINTRESOURCE(273), 
                                           IMAGE_ICON, 24, 24, LR_LOADTRANSPARENT);
        FreeLibrary( hShellLib );
    }
#endif // !UNDER_CE

    // Create display fonts
    m_hNameFont = CreateFontIndirect( &g_lfName );
    m_hConnectionFont = CreateFontIndirect( &g_lfConnection );

    InitializeCriticalSection( &m_csLock );
}




//-----------------------------------------------------------------------------
// Name: ~CSessionInfo()
// Desc: Destructor
//-----------------------------------------------------------------------------
CSessionInfo::~CSessionInfo()
{
    // Cleanup dialog
    if( m_hDlg )
        SendMessage( m_hDlg, WM_CLOSE, 0, 0 );
    
    SafeDestroyThread( &m_hDlgThread );

    // Cleanup interfaces
    SAFE_RELEASE( m_pPeer );
    SAFE_RELEASE( m_pClient );
    SAFE_RELEASE( m_pServer );

    for( UINT i=0; i < m_pPlayers->Count(); i++ )
    {
        CSIPlayer* pPlayer = (CSIPlayer*) m_pPlayers->GetPtr( i );
        SAFE_DELETE( pPlayer );
    }

    for( i=0; i < m_pGroups->Count(); i++ )
    {
        CSIGroup* pGroup = (CSIGroup*) m_pGroups->GetPtr( i );
        SAFE_DELETE( pGroup );
    }

    SAFE_DELETE( m_pPlayers );
    SAFE_DELETE( m_pGroups );

    DeleteObject( m_hNameFont );
    DeleteObject( m_hConnectionFont );

    DeleteCriticalSection( &m_csLock );
}




//-----------------------------------------------------------------------------
// Name: InitializeLocalPlayer()
// Desc: Initialize the local player given the guessed local dpnid. 
//-----------------------------------------------------------------------------
HRESULT CSessionInfo::InitializeLocalPlayer( DPNID idLocal )
{
    HRESULT hr = S_OK;
    DPN_PLAYER_INFO* pInfo = NULL;

#ifdef _DEBUG
    if( NULL == idLocal )
        return E_INVALIDARG;
#endif // _DEBUG

    hr = GetDpPlayerInfo( idLocal, &pInfo );

    switch( m_eType )
    {
        // Peer types can query information for any peer, including
        // themselves, so simply check the returned playerinfo structure
        // for the local flag
        case PEER:
            if( SUCCEEDED(hr) )
            {
                if( pInfo->dwPlayerFlags & DPNPLAYER_LOCAL )
                    m_dpnidLocal = idLocal;
                if( pInfo->dwPlayerFlags & DPNPLAYER_HOST )
                    m_dpnidHost = idLocal;
            }
            break;

        // Server types can't query for local information. In a typical game,
        // the player context would be checked to determine whether the created
        // player is the server; to avoid changing the player contexts for
        // every application this class is used with, we'll simply take a best
        // guess and assume that if the new player isn't a client it must be
        // the server.
        case SERVER:
            if( hr == DPNERR_INVALIDPLAYER )
            {
                m_dpnidLocal = m_dpnidHost = idLocal;
                hr = S_OK;
            }
            break;

        // Client types can simply wait for the server to send their local
        // information.
        case CLIENT:
            break;
    }

    return hr;
}




//-----------------------------------------------------------------------------
// Name: FindPlayer
// Desc: Search for and return the player based on dpnid
//-----------------------------------------------------------------------------
CSIPlayer* CSessionInfo::FindPlayer( DPNID id )
{
    // Find the player
    for( UINT i=0; i < m_pPlayers->Count(); i++ )
    {
       CSIPlayer* pPlayer = (CSIPlayer*)m_pPlayers->GetPtr( i );
       
        // Player found
        if( id == pPlayer->id )
            return pPlayer;
    }

    // Not found
    return NULL;
}




//-----------------------------------------------------------------------------
// Name: FindGroup
// Desc: Search for and return the group based on dpnid
//-----------------------------------------------------------------------------
CSIGroup* CSessionInfo::FindGroup( DPNID id )
{
    // Find the group
    for( UINT i=0; i < m_pGroups->Count(); i++ )
    {
        CSIGroup* pGroup = (CSIGroup*) m_pGroups->GetPtr( i );

        // Group found
        if( id == pGroup->id )
            return pGroup;
    }

    // Not found
    return NULL;
}




//-----------------------------------------------------------------------------
// Name: CreatePlayer()
// Desc: Creates a new player with the given ID and name, and adds the new node
//       to the player list
//-----------------------------------------------------------------------------
HRESULT CSessionInfo::CreatePlayer( DPNID id )
{
    HRESULT hr;

    // Create a new player object
    CSIPlayer* pNewPlayer = new CSIPlayer( id );
    if( NULL == pNewPlayer )
        return E_OUTOFMEMORY;

    // Add the new object to the list
    hr = m_pPlayers->Add( pNewPlayer );
    if( FAILED(hr) )
    {
        // Release the allocated memory and return the error code
        SAFE_DELETE( pNewPlayer );
        return hr;
    }

   return S_OK;
}




//-----------------------------------------------------------------------------
// Name: DestroyPlayer()
// Desc: Removes the player with the given ID from the player list
//-----------------------------------------------------------------------------
HRESULT CSessionInfo::DestroyPlayer( DPNID id )
{
    // Find the player
    for( UINT i=0; i < m_pPlayers->Count(); i++ )
    {
        CSIPlayer* pPlayer = (CSIPlayer*)m_pPlayers->GetPtr( i );

        // Player found
        if( id == pPlayer->id )
        {
            // Zero out the spot and return
            m_pPlayers->Remove( i );
            SAFE_DELETE( pPlayer );
            return S_OK;
        }
    }

    // Not found
    return E_FAIL;
}




//-----------------------------------------------------------------------------
// Name: CreateGroup()
// Desc: Creates a group with the given ID and name, and adds the new node to
//       the group list
//-----------------------------------------------------------------------------
HRESULT CSessionInfo::CreateGroup( DPNID id )
{
    HRESULT hr;

    // Create a new group object

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产三级一区二区| 污片在线观看一区二区| 日韩精品一区国产麻豆| 欧美主播一区二区三区| 99久久婷婷国产| 国产很黄免费观看久久| 国内精品伊人久久久久av影院 | 亚洲图片自拍偷拍| 亚洲人成网站影音先锋播放| 亚洲色图丝袜美腿| 亚洲图片激情小说| 一区二区三区在线视频观看58 | 国产原创一区二区| 国产一区二区三区香蕉| 国产主播一区二区三区| 国产电影精品久久禁18| 成人综合激情网| 99国产精品久久久久久久久久 | 欧美夫妻性生活| 欧美一区二区成人6969| 精品国精品国产尤物美女| 精品国产91久久久久久久妲己| 精品国产乱码久久久久久老虎| 精品免费视频一区二区| 国产日韩欧美a| 中文字幕亚洲精品在线观看 | 色8久久精品久久久久久蜜| 色狠狠桃花综合| 欧美日本韩国一区二区三区视频| 欧美电影一区二区三区| 欧美va亚洲va国产综合| 国产清纯白嫩初高生在线观看91| 久久久精品黄色| 日韩伦理免费电影| 午夜av一区二区三区| 精品一区二区在线视频| 国产一二精品视频| 亚洲综合色区另类av| 国产精品美女久久久久aⅴ| 色婷婷亚洲一区二区三区| 国产不卡一区视频| 99视频热这里只有精品免费| 欧美视频精品在线| 精品国产乱码久久久久久影片| 日本一二三不卡| 亚洲一区二区三区视频在线播放| 蜜臀av一区二区三区| 成人晚上爱看视频| 欧美日韩电影在线播放| 久久综合999| 亚洲一区自拍偷拍| 国产一区二区三区免费观看| 91国内精品野花午夜精品| 欧美电影免费提供在线观看| 国产精品乱码人人做人人爱| 天堂影院一区二区| 成人精品鲁一区一区二区| 欧美另类z0zxhd电影| 国产欧美一区二区三区网站 | 99久久精品国产一区二区三区| 在线电影院国产精品| 日本一区二区不卡视频| 蜜臀av性久久久久蜜臀aⅴ| 日本乱人伦一区| 国产亚洲综合性久久久影院| 午夜精品福利久久久| 成人福利在线看| 欧美videossexotv100| 亚洲国产乱码最新视频| 成人avav影音| 精品国产成人系列| 日韩国产欧美三级| 欧洲av在线精品| 国产精品嫩草影院com| 麻豆久久一区二区| 欧美丝袜自拍制服另类| 国产精品色哟哟| 久久99精品国产91久久来源| 欧美三片在线视频观看 | 国产一区二区三区在线观看精品| 在线观看日产精品| 中文字幕一区二区三区不卡在线| 国产伦精品一区二区三区免费迷 | 国产伦精品一区二区三区视频青涩 | 天堂久久久久va久久久久| 波多野结衣中文字幕一区 | www..com久久爱| 视频一区视频二区中文字幕| 欧美日韩视频第一区| 久久午夜色播影院免费高清| 成人一区在线看| 欧美精品一区二区三区在线 | 欧美久久久影院| 人人精品人人爱| 国产精品无遮挡| 成人免费视频免费观看| 亚洲狠狠丁香婷婷综合久久久| 91视频在线看| 另类欧美日韩国产在线| 国产精品欧美精品| 成人午夜激情片| 亚洲欧美一区二区三区孕妇| 色噜噜狠狠一区二区三区果冻| 亚洲一区二区三区视频在线| 精品国产百合女同互慰| 久久国产精品99精品国产| 精品欧美乱码久久久久久| 国产精品538一区二区在线| 国产欧美中文在线| 91视频观看免费| 亚洲国产精品久久不卡毛片| 69久久99精品久久久久婷婷| 韩国欧美国产1区| 国产日韩av一区| 欧美日韩国产一级| 91福利在线观看| av男人天堂一区| 亚洲成人精品一区二区| 亚洲国产成人午夜在线一区| 制服丝袜激情欧洲亚洲| 九九精品一区二区| 日韩av电影天堂| 国产成人av影院| 日韩毛片一二三区| 成人免费小视频| 三级亚洲高清视频| 亚洲欧美日韩人成在线播放| 久久综合999| 日日摸夜夜添夜夜添国产精品| 欧美日韩成人高清| 日本午夜精品视频在线观看| 日韩欧美123| 国产成人亚洲综合a∨婷婷| 欧美激情综合在线| 一本久久综合亚洲鲁鲁五月天 | 成人影视亚洲图片在线| 亚洲精品亚洲人成人网在线播放| 欧美日韩中文精品| 久久99在线观看| 中文字幕精品三区| 欧美视频一区在线观看| 免费看精品久久片| 亚洲国产成人午夜在线一区| 精品视频在线视频| 久久国产福利国产秒拍| 国产精品视频在线看| 欧美日韩中文另类| 国产尤物一区二区| 伊人性伊人情综合网| 精品人在线二区三区| 成人avav在线| 日韩av高清在线观看| 国产精品久久毛片| 91精品国产高清一区二区三区| 国产成人av网站| 亚洲丶国产丶欧美一区二区三区| 亚洲精品在线一区二区| 91在线看国产| 精一区二区三区| 一区二区三区在线视频免费| 久久先锋影音av鲁色资源网| 91老师国产黑色丝袜在线| 卡一卡二国产精品| 亚洲欧美电影一区二区| 精品区一区二区| 欧美色网站导航| 懂色av噜噜一区二区三区av| 日韩av网站在线观看| 亚洲精品中文在线观看| 久久久久久久综合日本| 欧美老人xxxx18| 色欧美日韩亚洲| 国产99一区视频免费| 免费不卡在线视频| 亚洲精品高清在线观看| 久久午夜羞羞影院免费观看| 这里只有精品99re| 色婷婷久久一区二区三区麻豆| 国产精品一区二区果冻传媒| 日本亚洲一区二区| 亚洲免费av在线| 欧美国产一区在线| 精品日韩成人av| 5月丁香婷婷综合| 91高清视频免费看| 99精品视频在线观看免费| 国产精品资源站在线| 麻豆精品视频在线观看视频| 性久久久久久久久| 亚洲精品成人少妇| 中文字幕一区二区三区乱码在线| 久久久亚洲午夜电影| 日韩精品一区二区在线| 欧美疯狂性受xxxxx喷水图片| 色综合激情五月| 99久久精品国产麻豆演员表| 顶级嫩模精品视频在线看| 国产在线国偷精品免费看| 麻豆精品一区二区| 久久精品国产99|