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

天行健 君子當(dā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 閱讀(193) 評論(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>
            亚洲欧美一区二区三区久久| 在线亚洲美日韩| 久久综合电影一区| 免费毛片一区二区三区久久久| 一色屋精品视频在线观看网站| 久久精品在线免费观看| 男女激情久久| 亚洲视频精品| 国产丝袜一区二区三区| 老司机免费视频一区二区三区| 亚洲黄色在线看| 午夜电影亚洲| 狠狠久久综合婷婷不卡| 欧美激情第六页| 亚洲在线免费| 欧美成人免费小视频| 亚洲一区二区三区涩| 国内精品久久久久伊人av| 欧美黄色网络| 性久久久久久| 亚洲狼人综合| 久久久久看片| 国产精品99久久久久久久女警| 国产欧美精品日韩| 欧美激情麻豆| 欧美主播一区二区三区| 亚洲精品乱码久久久久久| 久久精品一区二区| 一区二区三区视频在线播放| 韩国精品在线观看| 国产精品二区影院| 欧美国产免费| 久久黄色小说| 亚洲一级黄色片| 亚洲精品久久在线| 老司机亚洲精品| 欧美一区二区高清| 亚洲网站在线看| 最近中文字幕日韩精品| 国产在线视频欧美一区二区三区| 欧美三级日本三级少妇99| 久久综合伊人| 久久国产精彩视频| 亚洲女同精品视频| 亚洲最快最全在线视频| 亚洲成人在线视频播放 | 久久久一二三| 亚洲一区二区三区在线| 亚洲国产婷婷综合在线精品| 久久久久国产一区二区| 亚洲欧美三级伦理| 一区二区三区国产在线| 亚洲人精品午夜在线观看| 国内精品久久久久伊人av| 国产精品卡一卡二卡三| 欧美日韩日本国产亚洲在线| 男人的天堂成人在线| 久久久99免费视频| 欧美一区2区三区4区公司二百| 一区二区三区www| 亚洲精品免费在线播放| 亚洲国产高清在线观看视频| 欧美大胆人体视频| 免费观看成人www动漫视频| 久久精品人人做人人综合 | 欧美精品一区在线发布| 欧美成人精品h版在线观看| 久久一区二区三区四区五区| 久久久xxx| 久久精品综合一区| 久久精视频免费在线久久完整在线看 | 欧美日韩综合| 欧美性淫爽ww久久久久无| 欧美日韩极品在线观看一区| 欧美精品久久久久久久| 欧美精品一线| 欧美视频日韩| 国产精品网曝门| 国产伦精品一区二区三区免费迷 | 久久久久久穴| 蜜月aⅴ免费一区二区三区 | 欧美视频网址| 国产精品女人网站| 国产日韩欧美91| 韩国三级电影久久久久久| 国内精品久久久久影院优| 在线免费观看成人网| 亚洲黄色天堂| 亚洲一二三区精品| 欧美中文在线免费| 久久综合网络一区二区| 欧美成人精品h版在线观看| 亚洲国产精品一区二区www在线 | 亚洲精品韩国| 亚洲天堂av在线免费观看| 性视频1819p久久| 免播放器亚洲一区| 亚洲精选91| 午夜精品区一区二区三| 久久综合网色—综合色88| 欧美日韩成人在线播放| 国产欧美在线| 亚洲欧洲日韩在线| 亚洲欧美日韩系列| 你懂的视频一区二区| 日韩一级在线| 久久久久亚洲综合| 欧美日韩成人在线视频| 国产视频观看一区| 夜夜嗨网站十八久久| 久久成人免费电影| 亚洲国产日韩美| 亚洲综合色视频| 欧美国产日韩精品免费观看| 国产美女一区| 一本色道久久综合亚洲精品不 | 夜夜嗨一区二区| 久久久福利视频| 国产精品久久精品日日| 亚洲国产成人av在线| 亚洲欧美日韩另类| 亚洲国产精品一区制服丝袜| 亚洲欧美日韩在线观看a三区| 另类图片国产| 国产欧美午夜| 中文在线不卡| 欧美韩日一区二区三区| 午夜久久tv| 欧美日韩综合另类| 亚洲人被黑人高潮完整版| 久久国产精品亚洲77777| 亚洲精品在线观| 久久综合激情| 国产一区二区剧情av在线| 亚洲一区二区三区久久| 亚洲国产三级在线| 久久人人97超碰人人澡爱香蕉 | 亚洲美女av电影| 猛男gaygay欧美视频| 先锋影音一区二区三区| 欧美午夜精品久久久久久久| 亚洲精品四区| 欧美国产亚洲另类动漫| 久久精品视频在线免费观看| 国产美女精品视频免费观看| 亚洲一区二区欧美日韩| 最新成人在线| 欧美高清视频在线播放| 亚洲成人在线视频网站| 久久久久久久久一区二区| 亚洲天堂成人在线观看| 欧美视频在线观看一区二区| 日韩午夜激情av| 亚洲黄一区二区| 欧美大片在线观看一区二区| 亚洲国产精品久久久久秋霞蜜臀| 久久精品在线播放| 欧美一区成人| 国产永久精品大片wwwapp| 久久精品亚洲精品国产欧美kt∨| 亚洲综合社区| 国产日韩精品综合网站| 久久精品91久久久久久再现| 亚洲欧美一区二区三区极速播放| 国产精品专区第二| 久久本道综合色狠狠五月| 午夜亚洲影视| 狠狠干成人综合网| 男女激情视频一区| 蘑菇福利视频一区播放| 亚洲美女区一区| 一区二区成人精品| 国产女精品视频网站免费| 久久久久久一区二区| 久久久国产精品亚洲一区| 亚洲黄色在线| 亚洲精品在线看| 国产精品久久久久久久久免费| 欧美一区二区三区在线免费观看| 西西裸体人体做爰大胆久久久| 狠狠色丁香久久婷婷综合_中| 免费一级欧美片在线观看| 女人色偷偷aa久久天堂| 宅男66日本亚洲欧美视频| 亚洲综合激情| 伊人精品在线| 亚洲精品女人| 国产精品国产三级国产| 久久久久久久网站| 欧美激情中文字幕一区二区| 在线一区二区三区四区| 午夜欧美精品| 亚洲国产日日夜夜| 一区二区三区四区五区精品视频 | 伊人久久大香线| 亚洲精品一二| 国产一区二区三区久久精品| 亚洲黄色有码视频| 国产女精品视频网站免费| 欧美激情久久久久|