日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GS玩家登录

發布時間:2024/6/18 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GS玩家登录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
玩家上線 這個過程看了很多很多次了,這里在看下 客戶端打開,服務器收到libevent事件,然后new Channel這個過程都付給他各種指針,然后放到channel容器中 1.客戶端發送c2s_login 服務器發送s2c_login 并帶以下結果 enum LoginEnum {LoginSuccess,LoginPasswordOrUserError,LoginUserNotExist,LoginUserIsOnline, //用戶已在線 }; 1.根據用戶名查詢id,如果沒有返回LoginUserNotExist 2.如果有在去查詢用戶信息,然后匹配密碼,如果不正確 發送LoginPasswordOrUserError 成功就發送LoginSuccess 3.登錄成功之后發送角色列表 這步走的是json,感覺可以改成結構體,json解析封裝太慢2.客戶端發送c2s_select_actor 服務器根據id到數據庫獲取actorinfoex {//給客戶端發送本地玩家信息s2c_local_player_info,其實就是客戶端玩家,其實這個剛知道,其實是通過這個消息發送登錄玩家信息 LocPlayerInfo info;InitLocalPlayer(rActorEx, info);SendCmd(s2c_local_player_info, &info, sizeof(info)); } 3.將玩家加載到map中 m_pMap->Gs2MsData(gs2ms_add_player, m_nChannelId, (void*)&rActorEx, sizeof(rActorEx)); GameMap專門負責地圖的所有東西,和GS之間通過內部協議通信 void Map::Gs2MsData(int cmd, int channel_id, void* data, int len) {MapPkt pkt;pkt.channelId = channel_id;pkt.data = m_memPool.popPkt(len);//需要拷貝一份內存 memcpy(pkt.data, data, len);pkt.len = len;pkt.cmd = cmd;PushPkt(pkt);// }void ThrTransData::PushPkt(MapPkt Pkt) { #ifdef BOOST_LOCKFREEfor (;;){if(m_gs2msPkts2.push(Pkt))break;boost::this_thread::interruptible_wait(1);} #else{std::lock_guard<std::mutex> lock(m_mtxGs2Ms);m_queGs2MsPkts.push(Pkt);} #endif };//...else if(gs2ms_add_player == pkt.cmd)//在MS里面還有大量的事情要做,才能進入地圖,回頭再看 {PlayerChannel* pPC = new PlayerChannel(this);//加到地圖中,但是并未激活該玩家int nChannelId = pPC->OnPlayerEnter(pkt.data, pkt.len);m_vecPlayerChannel[nChannelId] = pPC;AddPlayer(nChannelId); } //... c2s_login s2c_login s2c_json 角色列表 c2c_select_actor s2c_local_player_info 然后將玩家放到MS中

?

轉載于:https://www.cnblogs.com/zzyoucan/p/4117523.html

總結

以上是生活随笔為你收集整理的GS玩家登录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。