青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天行健 君子當自強而不息

創建游戲內核(23)【OO改良版】

 

本篇是創建游戲內核(22)【OO改良版】的續篇,關于該內核的細節說明請參閱創建游戲內核(23)。


接口:

BOOL set_app_guid(const GUID* app_guid);

//====================================================================================
// This class encapsulate for network adapters.
//====================================================================================
typedef class NETWORK_ADAPTER
{
public:
    NETWORK_ADAPTER();
    ~NETWORK_ADAPTER();

    BOOL init();
    
void shutdown();

    
long get_num_adapters();
    BOOL get_name(
ulong index, char* name);
    GUID* get_guid(
ulong index);

    
static HRESULT WINAPI network_msg_handler(PVOID user_contex, DWORD msg_id, PVOID msg_buffer);

private:
    DPN_SERVICE_PROVIDER_INFO* m_adapter_list;
    
ulong m_num_adapters;
} *NETWORK_ADAPTER_PTR;
 

實現:

// Default application GUID
GUID g_app_guid = { 0x71118060, 0xfdb4, 0x11d4, { 0x90, 0x89, 0xeb, 0x5b, 0x75, 0x97, 0xe5, 0x70 } };


//---------------------------------------------------------------------------------
// Set a new application GUID
//---------------------------------------------------------------------------------
BOOL set_app_guid(const GUID* app_guid)
{
    
if(app_guid == NULL)
        
return FALSE;

    memcpy(&g_app_guid, app_guid, 
sizeof(GUID));

    
return TRUE;
}


////////////////////////////////// Defines for class NETWORK_ADAPTER //////////////////////////////////

//---------------------------------------------------------------------------------
// Callback function that receives all messages from the server, and receives indications 
// of session changes from the IDirectPlay8Client interface. 
//---------------------------------------------------------------------------------
HRESULT WINAPI NETWORK_ADAPTER::network_msg_handler(PVOID user_contex, DWORD msg_id, PVOID msg_buffer)
{
    
return S_OK;
}

//---------------------------------------------------------------------------------
// Constructor, initialize member data.
//---------------------------------------------------------------------------------
NETWORK_ADAPTER::NETWORK_ADAPTER()
{
    m_adapter_list = NULL;
}

//---------------------------------------------------------------------------------
// Destructor, release resource.
//---------------------------------------------------------------------------------
NETWORK_ADAPTER::~NETWORK_ADAPTER()
{
    shutdown();
}

//---------------------------------------------------------------------------------
// Release resource.
//---------------------------------------------------------------------------------
void NETWORK_ADAPTER::shutdown()
{
    delete[] m_adapter_list;
    m_adapter_list = NULL;

    m_num_adapters = 0;
}

//---------------------------------------------------------------------------------
// Enumerate adapter lists.
//---------------------------------------------------------------------------------
BOOL NETWORK_ADAPTER::init()
{
    IDirectPlay8Client* _client = NULL;
    DWORD _size = 0;

    
// free allocated resource first
    shutdown();

    
// create DirectPlay client component
    if(FAILED(CoCreateInstance(CLSID_DirectPlay8Client, NULL, CLSCTX_INPROC, IID_IDirectPlay8Client, (void**) &_client)))
        
return FALSE;

    
// assign a message handler to network component
    if(FAILED(_client->Initialize(NULL, network_msg_handler, 0)))
        
goto fail;

    
// query the required size of the data buffer
    if(_client->EnumServiceProviders(&CLSID_DP8SP_TCPIP, NULL, m_adapter_list, &_size, &m_num_adapters, 0) 
            != DPNERR_BUFFERTOOSMALL)
        
goto fail;

    
// allocate a buffer
    if((m_adapter_list = (DPN_SERVICE_PROVIDER_INFO*) new BYTE[_size]) == NULL)
        
goto fail;

    
// enumerate again
    if(FAILED(_client->EnumServiceProviders(&CLSID_DP8SP_TCPIP, NULL, m_adapter_list, &_size, &m_num_adapters, 0)))
        
goto fail;

    _client->Release();
    
return TRUE;

fail:
    _client->Release();
    
return FALSE;
}

//---------------------------------------------------------------------------------
// Get number of adapters.
//---------------------------------------------------------------------------------
long NETWORK_ADAPTER::get_num_adapters()
{
    
return m_num_adapters;
}

//---------------------------------------------------------------------------------
// Get adapter name.
//---------------------------------------------------------------------------------
BOOL NETWORK_ADAPTER::get_name(ulong index, char* name)
{
    
if(m_adapter_list == NULL || index >= m_num_adapters)
        
return FALSE;

    
// name must be at least MAX_PATH bytes in size
    wcstombs(name, m_adapter_list[index].pwszName, MAX_PATH);

    
return TRUE;
}

//---------------------------------------------------------------------------------
// Return pointer to adapter GUID.
//---------------------------------------------------------------------------------
GUID* NETWORK_ADAPTER::get_guid(ulong index)
{
    
if(m_adapter_list == NULL || index >= m_num_adapters)
        
return FALSE;

    
return &m_adapter_list[index].guid;
}

測試代碼:
/*****************************************************************************
PURPOSE:
    Test for class NETWORK_ADAPTER.
*****************************************************************************/


#include "core_common.h"
#include "core_framework.h"
#include "core_network.h"

class APP : public FRAMEWORK
{
public:
    BOOL init()
    {
        
if(! m_adapter.init())
            
return FALSE;

        
char buffer[2048] = {0};
        
char name[MAX_PATH] = {0};
        
char temp[MAX_PATH] = {0};

        
for(long i = 0; i < m_adapter.get_num_adapters(); i++)
        {           
            m_adapter.get_name(i, name);
            
            sprintf(temp, "%d: %s\n", i, name);

            strcat(buffer, temp);
        }

        MessageBox(NULL, buffer, "adapter_test", MB_OK);
        
        
return TRUE;
    }

    BOOL frame()
    {
        
return TRUE;
    }

    BOOL shutdown()
    {
        
return TRUE;
    }

private:
    NETWORK_ADAPTER m_adapter;   
};

int PASCAL WinMain(HINSTANCE inst, HINSTANCE, LPSTR cmd_line, int cmd_show)
{
    
if(! build_window(inst, "AdapterClass", "AdapterTest", WS_OVERLAPPEDWINDOW, 0, 0, 640, 480))
        
return -1;

    APP app;

    app.run();

    
return 0;
}

截圖:


posted on 2007-10-14 16:50 lovedday 閱讀(251) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


公告

導航

統計

常用鏈接

隨筆分類(178)

3D游戲編程相關鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            蜜臀av在线播放一区二区三区| 久久精品女人的天堂av| 欧美午夜美女看片| 欧美日韩精品不卡| 欧美另类人妖| 欧美日韩喷水| 国产精品一二三视频| 国产精品伊人日日| 激情成人在线视频| 亚洲欧洲精品天堂一级 | 在线看欧美日韩| 国产嫩草影院久久久久| 国产精品亚洲综合一区在线观看| 国产精品日韩欧美| 国产一区二区中文| 亚洲黑丝在线| 亚洲图色在线| 久久久久久高潮国产精品视| 久久综合久久久久88| 美女免费视频一区| 国产精品观看| 久久国产精品久久国产精品| 欧美在线地址| 亚洲国产一区二区三区a毛片| 在线日韩日本国产亚洲| 亚洲精品人人| 先锋资源久久| 欧美大片专区| 亚洲综合色自拍一区| 老鸭窝亚洲一区二区三区| 欧美日韩精品欧美日韩精品 | 一区二区三区四区五区视频| 欧美一级二级三级蜜桃| 欧美成人免费一级人片100| 欧美午夜一区二区福利视频| 海角社区69精品视频| 一本色道**综合亚洲精品蜜桃冫 | 99精品欧美一区二区三区| 欧美亚洲尤物久久| 欧美日韩福利视频| 欧美成人情趣视频| 国产婷婷一区二区| 亚洲一区二区三区在线| 亚洲成人在线网站| 亚洲午夜久久久久久久久电影院| 美女视频一区免费观看| 国产视频一区免费看| 亚洲一区二区三区精品视频| 亚洲欧洲精品一区二区精品久久久| 欧美一区亚洲| 国产亚洲精品高潮| 亚洲欧美国产77777| 最新成人av在线| 久久麻豆一区二区| 一区二区三区在线免费播放| 久久大香伊蕉在人线观看热2| 一本色道久久综合| 欧美日本不卡| 洋洋av久久久久久久一区| 欧美电影免费观看大全| 老色批av在线精品| 亚洲国产第一| 欧美激情精品久久久久久久变态| 久久国产黑丝| 国内精品一区二区三区| 在线免费观看日韩欧美| 久久在线免费观看视频| 久久精品72免费观看| 伊人久久大香线蕉综合热线 | 久久免费视频观看| 欧美一区2区三区4区公司二百| 国产精品久久久久久久久搜平片 | 亚洲视频1区2区| 日韩亚洲欧美中文三级| 国产精品高潮呻吟久久av黑人| 亚洲香蕉网站| 亚洲在线成人精品| 国产一区二区三区久久久久久久久| 久久高清一区| 久久日韩精品| 99精品热视频| 亚洲一区视频| 亚洲东热激情| 一本色道久久综合狠狠躁的推荐| 国产精品久久久久久av下载红粉 | 亚洲高清视频在线观看| 欧美日韩一区二| 欧美在线你懂的| 久久综合网络一区二区| 正在播放日韩| 欧美一区二区在线免费观看| 亚洲国产成人高清精品| 在线综合欧美| 精品999网站| 亚洲国产精品一区二区www在线| 欧美日本国产| 久久免费黄色| 欧美亚韩一区| 欧美黄色一级视频| 亚洲欧洲日本mm| 欧美午夜一区二区三区免费大片 | 久久久久久亚洲精品杨幂换脸 | 国产精品久久久爽爽爽麻豆色哟哟| 欧美在线免费视频| 欧美精品久久久久a| 亚洲在线视频观看| 麻豆国产精品va在线观看不卡| 亚洲一区二区三区中文字幕| 久久精品夜夜夜夜久久| 亚洲一区二区精品| 免费中文字幕日韩欧美| 久久精品国产一区二区三| 欧美日韩天天操| 欧美国产一区二区三区激情无套| 国产精品久久99| 亚洲精品久久久久久久久久久久 | 在线一区二区三区四区| 久久综合伊人77777麻豆| 亚洲免费在线电影| 嫩草伊人久久精品少妇av杨幂| 亚洲欧美日本视频在线观看| 久久网站免费| 久久久久成人网| 国产精品午夜在线观看| 亚洲三级国产| 亚洲日本成人女熟在线观看| 欧美中文字幕在线播放| 欧美亚洲网站| 国产精品久久久久影院亚瑟| 日韩亚洲视频在线| 日韩特黄影片| 欧美国产一区二区在线观看 | 欧美1区3d| 男人的天堂亚洲| 黄色精品一二区| 久久精品国产一区二区三区免费看| 午夜精品一区二区在线观看 | 久久久久久亚洲精品杨幂换脸| 国产精品v亚洲精品v日韩精品| 亚洲麻豆av| 在线综合欧美| 欧美性理论片在线观看片免费| 99精品久久久| 性欧美超级视频| 国产区日韩欧美| 欧美一区二区日韩一区二区| 久久精品30| 在线日韩av片| 欧美激情综合在线| 99riav久久精品riav| 亚洲影视九九影院在线观看| 国产精品毛片a∨一区二区三区|国| 亚洲一区二区三区欧美| 久久狠狠亚洲综合| 亚洲电影免费在线| 欧美久久久久久久| 一区二区三区免费观看| 久久精品国产综合| 亚洲精品一区二区三区99| 欧美日本中文| 亚洲午夜精品一区二区三区他趣| 久久久久久国产精品一区| 亚洲国产精品va在线看黑人动漫 | 国产午夜精品在线| 久久免费少妇高潮久久精品99| 欧美国产91| 亚洲性线免费观看视频成熟| 国产精品一级| 蜜桃精品久久久久久久免费影院| 亚洲国产一区二区精品专区| 亚洲欧美激情一区| 在线成人免费观看| 欧美日韩在线另类| 久久国产夜色精品鲁鲁99| 91久久精品国产| 99亚洲一区二区| 亚洲黄色在线观看| 亚洲无线视频| 黄色一区二区在线观看| 欧美精品乱人伦久久久久久 | 欧美α欧美αv大片| 一区二区三区国产精华| 国产午夜精品麻豆| 欧美日韩色一区| 老司机免费视频一区二区| 亚洲男女毛片无遮挡| 最近看过的日韩成人| 久久夜色精品国产亚洲aⅴ| 亚洲午夜91| 亚洲精品一区二区三区99| 国产一区美女| 国产精品一区久久久| 欧美激情视频在线播放| 久久久精品免费视频| 亚洲一区二区三区免费视频| 亚洲精品社区| 亚洲国产精品第一区二区三区| 久久久美女艺术照精彩视频福利播放| 亚洲视频欧美在线| 一本色道久久99精品综合 |