博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
share
阅读量:6637 次
发布时间:2019-06-25

本文共 2739 字,大约阅读时间需要 9 分钟。

GameServer号称游戏服务器,是整个服务器的控制其中驱动的东西很多,网络:DataLayer,接收所有map发到GS过来的包,从网络层接报,数据库:DB,数据库回调驱动,玩家:GameChannel,玩家接报,道具,帮会等定时保存,几个定时器管理,帮助GC发送未发送的数据,所有的工作都是在GS线程里面做的是名副其实的服务器跟GameServer同等重要的要数share了share做的东西也是相当的多,管理所有玩家通道,跨地图操作,所有地图操作这边有个很重要的继承就是GameServer继承Share,share到底是干啥的,这个问题由来已久,从我到公司就有了,一直搞不懂,以及GameServer和Share之间的区别,其实share就是上面的作用至于GS为什么从share继承,GS既然号称游戏服务器当然要驱动所有的东西,包括所有地图发送GS的包,玩家包至于这么晚才看懂,我只能说有点晚了。就像网络发包那块,磨了那么久至于发送失败的GC,send_stat hr = m_pDataLayer->SendData(m_nChannelId, pkt.pData, pkt.nSize);就是应该是共享内存分配不到内存了,然后放到等待队列中让GS去发送接下来就重点看看这些解包过程/** *对于商城,道具,组队,帮会都是跨地图的,所以不是写在map中 *对于为什么是跨地图的,在看看 */void Share::ProcMapSendData(){    for(auto itMap : m_mapMap)    {        MapPkt Pkt;        try        {            for (;;)            {                if(!itMap.second->RecvData(Pkt))                    break;                if(Pkt.cmd == ms2gs_转client_cmd)                {                    OnTurnToClient(Pkt.channelId, Pkt.data, Pkt.len);//从GS发送到客户端,至于这个为什么从GS发送,我记得map不是直接发送的吗                }                else if(Pkt.cmd == ms2gs_json)                {                    OnJson(Pkt.channelId, Pkt.data, Pkt.len);//据说这些都是在一个线程里面,因为他发包和收包都是在一个线程里面,包括相关操作,所以说在一个线程里面,这样说就是安全的                }                else if(ms2gs_db_buff_info == Pkt.cmd)//保存数据库                {                    OnLeaveMap(Pkt.channelId, Pkt.data, Pkt.len);                }                else if(ms2gs_obj_leave == Pkt.cmd)    //玩家切换地图                {                    OnEnterNewMap(Pkt.channelId, Pkt.data, Pkt.len);                }                else if(ms2gs_guild_opt == Pkt.cmd)//帮会操作                {                    m_spGuildOpt->OnGuildOpt(Pkt.channelId, Pkt.data, Pkt.len);                }                else if (ms2gs_prop_mgr == Pkt.cmd)//道具操作                {                    m_spPropManager->OnPropMgrOpt(Pkt.channelId, Pkt.data, Pkt.len);                }                else if (ms2ms_cmd == Pkt.cmd)                {                    OnTurnToMap(Pkt.mapId, Pkt.data, Pkt.len);                }                else if (ms2gs_mall_opt == Pkt.cmd)//商城                {                    m_spMallOpt->OnMallOpt(Pkt.channelId, Pkt.data, Pkt.len);                }                else if (ms2gs_auction_opt == Pkt.cmd)//拍卖行                {                    m_spAuctionOpt->OnAuctionOpt(Pkt.channelId, Pkt.data, Pkt.len);                }                delete[] Pkt.data;                Pkt.data = nullptr;            }        }        catch(...)        {            char sErrMsg[256] = {
0}; sprintf(sErrMsg, "【%s】ShareCenter:接收%d地图的 cmd = %d 指令时时出错!", __FUNCTION__, itMap.first, Pkt.cmd); ShuiHu::GetLogger()->Fatal(sErrMsg); safe::error_msg(sErrMsg); } }}

 

转载地址:http://xmivo.baihongyu.com/

你可能感兴趣的文章
[转] Java快速教程
查看>>
转载:Jmeter教程索引
查看>>
constexpr的用法
查看>>
打造属于前端的Uri解析器
查看>>
地图位置定位的封装开发
查看>>
java面试题——java基础(四)
查看>>
MySQL之char、varchar和text的设计
查看>>
requests bs4 datetime re json
查看>>
Jenkins+PowerShell持续集成环境搭建(三)Web项目
查看>>
tensorflow 1.0 学习:模型的保存与恢复
查看>>
ICA和PCA
查看>>
常用位运算
查看>>
傅立叶变换系列(五)快速傅立叶变换(FFT)
查看>>
FROM USE CASES TO TEST CASES
查看>>
E - Blue Jeans POJ - 3080 (Hash+暴力)
查看>>
面试题
查看>>
mongodb 高级操作
查看>>
[K/3Cloud]ksql翻译札记
查看>>
SPOJ Problem 394:Alphacode
查看>>
c# 判断网络是否连接
查看>>