• <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>

            天行健 君子當(dāng)自強(qiáng)而不息

            創(chuàng)建游戲內(nèi)核(23)【OO改良版】

             

            本篇是創(chuàng)建游戲內(nèi)核(22)【OO改良版】的續(xù)篇,關(guān)于該內(nèi)核的細(xì)節(jié)說明請參閱創(chuàng)建游戲內(nèi)核(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;
             

            實現(xiàn):

            // 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 閱讀(241) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            公告

            導(dǎo)航

            統(tǒng)計

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關(guān)鏈接

            搜索

            最新評論

            久久青草国产精品一区| 色综合久久久久无码专区| 久久夜色精品国产噜噜亚洲AV| 久久精品人妻中文系列| 午夜精品久久久久久毛片| 99久久er这里只有精品18| 99久久精品免费观看国产| 久久人妻少妇嫩草AV蜜桃| 日本人妻丰满熟妇久久久久久| 99国产欧美精品久久久蜜芽| 人人狠狠综合久久亚洲高清| 亚洲精品乱码久久久久久蜜桃图片| a级成人毛片久久| 狠狠色婷婷久久一区二区| 久久久久综合网久久| 久久精品国产99久久久古代| 久久福利青草精品资源站免费| 美女久久久久久| 丰满少妇人妻久久久久久4| 777午夜精品久久av蜜臀| 久久亚洲高清综合| 久久国产精品99久久久久久老狼| 中文国产成人精品久久亚洲精品AⅤ无码精品| 蜜臀久久99精品久久久久久小说 | 精品久久久久久久中文字幕| 综合久久一区二区三区 | 伊人热热久久原色播放www| 久久久精品一区二区三区| 伊人久久大香线焦AV综合影院| 久久精品国产黑森林| 亚洲国产精品婷婷久久| 国产精品毛片久久久久久久| 日韩av无码久久精品免费| 久久人人爽人人人人片av| 亚洲精品97久久中文字幕无码| 97久久精品人人做人人爽| 亚洲国产精品婷婷久久| 91精品国产高清久久久久久国产嫩草| 亚洲精品乱码久久久久久蜜桃图片| 亚洲国产成人乱码精品女人久久久不卡| 精品久久人人做人人爽综合|