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

天行健 君子當自強而不息

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 閱讀(193) 評論(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>
            91久久精品一区二区别| 亚洲精品社区| 久久精品国产亚洲一区二区| 国产精品视频久久久| 校园春色综合网| 午夜精品久久久| 激情成人综合| 亚洲国产精品久久久久秋霞不卡| 巨乳诱惑日韩免费av| 亚洲黄色毛片| 亚洲精品永久免费| 国产精品嫩草99av在线| 欧美中文在线视频| 久久婷婷蜜乳一本欲蜜臀| 亚洲电影免费观看高清| 亚洲国产精品久久久久婷婷老年| 欧美电影在线免费观看网站| 中文久久精品| 亚洲欧美日韩精品久久亚洲区| 国内成+人亚洲+欧美+综合在线| 久久婷婷成人综合色| 麻豆成人综合网| 一区二区三区精品久久久| 亚洲欧美中文字幕| 亚洲欧洲日产国产综合网| 亚洲美女电影在线| 国产最新精品精品你懂的| 欧美激情免费在线| 国产精品伦一区| 美玉足脚交一区二区三区图片| 欧美成人精品福利| 欧美在线免费观看视频| 老司机成人网| 欧美一区二区三区免费视| 久久影院午夜片一区| 亚洲伊人一本大道中文字幕| 久久激情中文| 亚洲字幕一区二区| 美女诱惑黄网站一区| 性欧美1819sex性高清| 欧美成人a∨高清免费观看| 欧美在线不卡| 欧美美女bb生活片| 欧美+日本+国产+在线a∨观看| 欧美日韩亚洲一区三区| 欧美大片一区二区三区| 国产精品一区二区三区四区| 亚洲国产成人精品视频| 国内精品久久久久影院色| 亚洲婷婷国产精品电影人久久 | 中日韩高清电影网| 亚洲精品1区2区| 久久精品欧美日韩| 欧美一区二区精品| 国产精品hd| 日韩亚洲欧美高清| 9国产精品视频| 欧美大片在线观看一区| 欧美成人自拍视频| 精品成人a区在线观看| 性亚洲最疯狂xxxx高清| 性久久久久久久久久久久| 欧美日韩一区在线观看视频| 亚洲国产高潮在线观看| …久久精品99久久香蕉国产| 欧美淫片网站| 久久精品99久久香蕉国产色戒| 国产精品入口福利| 亚洲午夜精品17c| 午夜精品电影| 国产精品推荐精品| 亚洲午夜性刺激影院| 亚洲欧美成人| 欧美视频中文字幕在线| 一本色道久久88综合日韩精品| 99精品久久| 欧美调教视频| 亚洲主播在线观看| 久久久国产精彩视频美女艺术照福利| 国产欧美 在线欧美| 午夜视频在线观看一区二区三区| 欧美一区午夜视频在线观看| 国产欧美一区二区三区在线看蜜臀 | 亚洲美女视频网| 欧美激情精品久久久久久久变态| 亚洲激情一区二区| 亚洲伊人网站| 国产欧美一区二区精品秋霞影院 | 午夜精品久久久久久久久久久久久| 性欧美videos另类喷潮| 国产一区二区久久精品| 久久一区欧美| 亚洲免费久久| 久久经典综合| 91久久久久久久久| 欧美女激情福利| 香蕉成人啪国产精品视频综合网| 久久天堂国产精品| 一区二区精品在线| 国产美女扒开尿口久久久| 久久人91精品久久久久久不卡 | 亚洲永久免费观看| 国内精品国产成人| 欧美国产成人在线| 香蕉成人啪国产精品视频综合网| 免费观看成人www动漫视频| 99精品视频一区二区三区| 国产欧美一区二区三区久久人妖| 久久永久免费| 亚洲欧美日韩综合aⅴ视频| 蜜桃av噜噜一区二区三区| 99这里只有久久精品视频| 国产欧美日韩免费| 欧美日韩精品免费观看视频完整 | 欧美黄色一区二区| 性18欧美另类| 亚洲精品一区二区三区av| 国产女人精品视频| 欧美区二区三区| 久久久久国产一区二区三区| 日韩一级在线| 欧美电影免费观看大全| 亚洲欧美一区二区三区久久| 91久久国产综合久久91精品网站| 国产日韩欧美麻豆| 欧美性猛片xxxx免费看久爱| 蜜乳av另类精品一区二区| 欧美一区成人| 亚洲一区二区三区在线看| 最新日韩精品| 亚洲大片在线观看| 麻豆精品传媒视频| 久久精品欧洲| 性亚洲最疯狂xxxx高清| 亚洲一区国产精品| 一本色道久久综合狠狠躁篇的优点 | 亚洲精品免费一二三区| 狠狠色噜噜狠狠色综合久| 国产欧美日韩免费看aⅴ视频| 欧美日韩精品一区二区三区四区 | 欧美在线三区| 亚洲自拍另类| 亚洲尤物视频网| 亚洲主播在线播放| 亚洲在线播放| 亚洲欧美在线另类| 午夜精品久久久久久久99樱桃 | 久久久噜噜噜久久中文字幕色伊伊 | 亚洲精品黄网在线观看| 欧美激情欧美激情在线五月| 欧美jizzhd精品欧美巨大免费| 久久裸体艺术| 久久一区精品| 欧美国产精品日韩| 欧美国产日韩一区二区| 亚洲黑丝在线| 99re热精品| 午夜精品999| 欧美在线视频免费观看| 久久精品中文字幕免费mv| 久久天天躁狠狠躁夜夜av| 免费91麻豆精品国产自产在线观看| 久久久久久久激情视频| 免播放器亚洲一区| 欧美精品久久久久a| 欧美色视频日本高清在线观看| 欧美视频在线观看| 国产伦精品一区| 一区在线影院| 日韩一区二区精品视频| 午夜精品国产| 欧美jizz19性欧美| 亚洲美女在线看| 午夜在线一区二区| 玖玖综合伊人| 国产精品国产三级欧美二区| 国产日韩欧美精品在线| 最新日韩精品| 欧美一级久久| 欧美v国产在线一区二区三区| 亚洲国产精品一区制服丝袜 | 亚洲精品永久免费精品| 亚洲午夜激情| 美女视频一区免费观看| 欧美日韩一区二区国产| 国产午夜久久| 日韩亚洲国产精品| 久久久久久久999| 亚洲精品久久久久中文字幕欢迎你| 亚洲色图自拍| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美精品一区二区三区蜜臀| 国产日韩欧美成人| 日韩亚洲一区二区| 乱中年女人伦av一区二区| 一区二区三区精品在线| 欧美sm视频| 狠狠久久婷婷| 欧美一级视频| 一区二区三区欧美在线|