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

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

Getting Online with Multiplayer Gaming(12)

 

Processing Game Messages

Now that the game messages have made their way into the message queue, the next
step is to remove the messages at each frame and process them. To keep things
running quickly, only 64 messages at a time are processed (as defined by the
MESSAGE_PER_FRAME macro in the server source code).

Message processing takes place within the cApp::process_queued_msg function:

void cApp::process_queue_msg()
{
    
long count = 0;

    
// pull out messages to process
    while(count != MESSAGES_PER_FRAME && m_msg_head != m_msg_tail)
    {
        
// get pointer to 'tail' message
        EnterCriticalSection(&m_msg_cs);
        sMsg* msg = &m_msgs[m_msg_tail];
        LeaveCriticalSection(&m_msg_cs);

        
// process a single message based on type
        switch(msg->header.type)
        {
        
case MSG_SEND_PLAYER_INFO:
            send_player_info(msg, msg->header.player_id);
            
break;

        
case MSG_CREATE_PLAYER:
            add_player(msg);
            
break;

        
case MSG_DESTROY_PLAYER:
            remove_player(msg);
            
break;

        
case MSG_STATE_CHANGE:
            player_state_change(msg);
            
break;
        }

        count++;    
// increase processed message count

        // goto next message in list
        EnterCriticalSection(&m_msg_cs);
        m_msg_tail = (m_msg_tail + 1) % MAX_MESSAGES;
        LeaveCriticalSection(&m_msg_cs);
    }
}

As process_queue_msg iterates through the next 64 messages, it calls upon a separate
set of functions to handle the various game messages. Those message-handling
functions are described in the following sections.

 

cApp::add_player

Let’s face it—your game is going to be cool, and before long you’ll have players joining
the game left and right. When a player joins the game (or at least tries to join), a player
message is added to the queue, and when that message is processed, the add_player function
is called to find room for the player. If no room exists, that player is disconnected.

bool cApp::add_player(const sMsg* msg)
{
    DPNID player_id = msg->header.player_id;
    DWORD size = 0;
    DPN_PLAYER_INFO* player_info = NULL;

    
// get the player information
    HRESULT hr = m_server.get_server()->GetClientInfo(player_id, player_info, &size, 0);
    
if(FAILED(hr) && hr != DPNERR_BUFFERTOOSMALL)
        
return false;

    
// allocate player data buffer and try again
    player_info = (DPN_PLAYER_INFO*) new byte[size];
    
if(player_info == NULL)
        
return false;

    ZeroMemory(player_info, size);

    player_info->dwSize = 
sizeof(DPN_PLAYER_INFO);

    
if(FAILED(m_server.get_server()->GetClientInfo(player_id, player_info, &size, 0)))
    {
        delete[] player_info;
        
return false;
    }
    
    
// make sure not already in list
    for(long i = 0; i < MAX_PLAYERS; i++)
    {
        
if(m_players[i].player_id == player_id && m_players[i].connected)
        {
            delete[] player_info;
            m_server.disconnect_player(player_id);
            
return false;
        }
    }

    
// search for an empty slot to put player
    for(long i = 0; i < MAX_PLAYERS; i++)
    {
        
if(! m_players[i].connected)
        {
            m_players[i].connected  = 
true;
            m_players[i].player_id  = player_id;
            m_players[i].x_pos      = 0.0f;
            m_players[i].y_pos      = 0.0f;
            m_players[i].z_pos      = 0.0f;
            m_players[i].direction  = 0.0f;
            m_players[i].speed      = 512.0f;
            m_players[i].last_state = STATE_IDLE;
            m_players[i].latency    = 0;

            wcstombs(m_players[i].name, player_info->pwszName, 
sizeof(m_players[i].name));

            
// send add player information to all players in area

            sCreatePlayerMsg create_msg;

            create_msg.header.type      = MSG_CREATE_PLAYER;
            create_msg.header.size      = 
sizeof(sCreatePlayerMsg);
            create_msg.header.player_id = player_id;
            create_msg.x_pos            = m_players[i].x_pos;
            create_msg.y_pos            = m_players[i].y_pos;
            create_msg.z_pos            = m_players[i].z_pos;
            create_msg.direction        = m_players[i].direction;

            send_network_msg(&create_msg, DPNSEND_NOLOOPBACK, ALL_CLIENT_PLAYERS);

            m_connected_player_num++;
            list_players();
            delete[] player_info;

            
return true;
        }   
    }

    delete[] player_info;
    m_server.disconnect_player(player_id);

    
return false;
}

///////////////////////////////////////////////////////////////////////////////////////

void cApp::list_players()
{
    
// clear player list
    reset_listbox(m_controls[CONTROL_PLAYER_LIST]);

    
// count alll players and add names to list
    for(long i = 0; i < MAX_PLAYERS; i++)
    {
        
if(m_players[i].connected)
            add_string_to_listbox(m_controls[CONTROL_PLAYER_LIST], m_players[i].name);
    }

    
// display player count
    if(m_connected_player_num == 0)
        SetWindowText(m_controls[CONTROL_PLAYER_NUM], "No Connected Players");
    
else
    {
        
char text[256];
        sprintf(text, "%lu players connected", m_connected_player_num);

        SetWindowText(m_controls[CONTROL_PLAYER_NUM], text);
    }
}
 

posted on 2007-12-18 22:00 lovedday 閱讀(191) 評論(0)  編輯 收藏 引用


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


公告

導(dǎo)航

統(tǒng)計

常用鏈接

隨筆分類(178)

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

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美国产视频一区二区| 欧美成熟视频| 国产视频亚洲精品| 久久精品视频99| 久久精品欧洲| 亚洲人精品午夜| 99精品视频免费全部在线| 欧美午夜激情在线| 久久久国产精品亚洲一区| 久久亚洲精品一区| 日韩视频在线免费| 亚洲国产岛国毛片在线| 韩日午夜在线资源一区二区| 一区二区在线观看av| 欧美高清一区二区| 欧美日韩精品是欧美日韩精品| 亚洲欧美国产毛片在线| 欧美中文字幕不卡| 99www免费人成精品| 午夜精品福利在线| 91久久国产自产拍夜夜嗨| 9i看片成人免费高清| 国内成人在线| 99精品欧美一区二区三区| 激情国产一区二区| 亚洲精品在线观看免费| 国产一区在线看| 亚洲理论电影网| 在线观看亚洲视频啊啊啊啊| 99精品国产在热久久| 激情偷拍久久| 亚洲一区二区影院| 亚洲激情综合| 久久成人免费日本黄色| 一区二区三区日韩| 久久精品亚洲热| 亚洲天堂成人| 嫩草国产精品入口| 久久综合给合久久狠狠狠97色69| 欧美视频精品一区| 亚洲高清在线观看一区| 国产视频久久久久| 一本色道久久| 日韩亚洲欧美一区| 蜜臀久久久99精品久久久久久| 欧美尤物一区| 国产精品毛片高清在线完整版| 亚洲激情视频在线播放| 一区二区三区在线视频播放| 午夜视频在线观看一区二区| 亚洲一级二级| 欧美日韩日韩| 日韩亚洲视频在线| 在线一区二区三区四区五区| 欧美99在线视频观看| 你懂的国产精品永久在线| 国产综合色产| 久久精品国产99| 久久人人爽人人爽| 国语自产精品视频在线看一大j8 | 亚洲综合色网站| 欧美激情精品久久久久| 亚洲激情精品| 一区二区三区欧美| 欧美日韩色婷婷| 日韩午夜在线| 亚久久调教视频| 国产精品手机在线| 亚洲欧美日韩国产综合| 久久精品国产久精国产爱| 国产一区二区在线观看免费播放| 亚洲一区欧美激情| 久久精品国产精品亚洲精品| 狠狠色综合播放一区二区| 久久在线免费观看| 欧美激情在线观看| 99热这里只有精品8| 欧美视频在线观看视频极品| 亚洲香蕉网站| 久久网站免费| 亚洲精品乱码久久久久久蜜桃91| 欧美日本韩国在线| 亚洲一区二区三区三| 久久亚洲国产精品一区二区| 亚洲高清网站| 国产精品xxxxx| 欧美一区二区在线播放| 欧美成人午夜视频| 亚洲一级网站| 影音先锋亚洲电影| 欧美日本韩国| 久久国产加勒比精品无码| 欧美国产精品劲爆| 亚洲欧美日韩综合aⅴ视频| 国产亚洲欧美一区| 欧美黑人在线播放| 亚洲女人天堂av| 亚洲激情国产精品| 久久国产一区| av成人国产| 在线观看亚洲视频啊啊啊啊| 欧美日韩亚洲国产一区| 久久国产精品99久久久久久老狼| 亚洲国产精品久久久久久女王| 性欧美1819sex性高清| 亚洲国产网站| 国产亚洲成人一区| 欧美日韩一区二区三区在线视频| 久久久97精品| 亚洲一卡二卡三卡四卡五卡| 亚洲成色精品| 久久高清福利视频| 亚洲天堂网在线观看| 亚洲成人在线| 国产亚洲精品久久久久动| 欧美日本中文字幕| 麻豆久久婷婷| 欧美伊人精品成人久久综合97| 99re6这里只有精品| 你懂的国产精品| 久久裸体艺术| 西瓜成人精品人成网站| 一本久久a久久精品亚洲| 亚洲高清视频中文字幕| 国产亚洲一区二区三区在线观看 | 亚洲欧美日本另类| 亚洲精品一区在线观看| 精品成人一区二区三区| 国产日韩欧美夫妻视频在线观看| 欧美日韩一区二区在线观看| 欧美激情精品久久久久久久变态| 久久久最新网址| 久久久亚洲午夜电影| 欧美中文字幕在线视频| 欧美亚洲视频一区二区| 亚洲影音先锋| 亚洲图片欧美日产| 亚洲视频1区2区| 亚洲性感激情| 亚洲欧美激情精品一区二区| 亚洲免费视频中文字幕| 一本不卡影院| 亚洲调教视频在线观看| 亚洲亚洲精品三区日韩精品在线视频| 亚洲三级免费观看| 亚洲裸体视频| 在线亚洲欧美视频| 亚洲午夜电影网| 亚洲影音一区| 久久高清国产| 久久一区视频| 欧美激情第3页| 欧美特黄一级大片| 国产精品一区二区在线观看| 国产偷自视频区视频一区二区| 国产乱码精品1区2区3区| 国产一区二区三区高清| 在线国产亚洲欧美| 亚洲精一区二区三区| 亚洲一二三区精品| 久久国产手机看片| 欧美jizz19性欧美| 亚洲乱码国产乱码精品精天堂| 亚洲视频中文| 欧美影视一区| 欧美精品一区二区久久婷婷| 欧美性猛交xxxx乱大交退制版| 国产乱码精品一区二区三区av| 狠狠干成人综合网| 日韩写真在线| 久久国产一二区| 亚洲黄色毛片| 新片速递亚洲合集欧美合集| 狂野欧美性猛交xxxx巴西| 欧美日本不卡高清| 狠狠干综合网| 亚洲午夜一区二区三区| 久久网站免费| 亚洲视频在线视频| 久热精品在线视频| 国产精品美女午夜av| 亚洲福利久久| 欧美在线看片a免费观看| 亚洲高清久久| 性欧美videos另类喷潮| 欧美黄色影院| 在线 亚洲欧美在线综合一区| 亚洲系列中文字幕| 欧美成熟视频| 欧美一区二区三区在线观看| 欧美裸体一区二区三区| 国外成人性视频| 亚洲欧美久久久久一区二区三区| 欧美成人国产一区二区| 午夜日韩av| 国产精品视频午夜| 99精品国产在热久久| 欧美岛国在线观看| 欧美在线黄色| 国产亚洲欧美一区在线观看|