博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
客户端发包 GS端接收
阅读量:4317 次
发布时间:2019-06-06

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

客户端发包,GS接收bool GameServer::ProcessLoop(packet& rPkt)//GS线程做的{    if(false == m_spDataLayer->Recv(rPkt))        return true;//没数据了        if(rPkt.is_data)    {        if(!rPkt.data)//数据为空            return false;        GameChannel* pGC = m_vecChannel[rPkt.channel_id];//m_vecChannelGS里面所有玩家的通道,通过channelid唯一标识        if(pGC)            pGC->OnReceiveData(rPkt.data, rPkt.size);            m_LiveMgr.OnLive(rPkt.channel_id);    }}//还是第一次看到这种覆盖的用法,BaseChannel::OnReceiveData直接调用父类的函数//现在感觉这样写比较好,子类可以处理自己的逻辑,不然都放到BaseChannel::OnReceiveData,耦合度变大了//gs2ms_转client_cmd从GS发送到MS命令,在GS和MS之间定义的协议属于内部协议,如果发平行关系就太多了,//通过内部定义的几个协议,然后再MS里面在分,感觉这样清晰很多//关于哪个包发到哪一层,一般发到GS这边的和地图没关系,或者是跨地图的操作,不然都会讲这个包发到MS里面,其实这个我有点模糊,回头再详看bool GameChannel::OnReceiveData(void* pData, int nLen){    if(!BaseChannel::OnReceiveData(pData, nLen))    {        if(m_eGameState != eGameState_EnterMap)//没有进入地图            return false;         m_pMap->Gs2MsData(gs2ms_转client_cmd, m_nChannelId, pData, nLen);//gs2ms_转client_cmd,难道这个消息到MS里面就一定会转到客户端吗?不一定吧    }    return true;}bool BaseChannel::OnReceiveData(void* data, int len){    Protocol Ptl = {
0}; if(!Ptl.from_buffer(data, len)) { return false; } auto it = m_mapPktAnalysis.find(Ptl.cmd_type); if(it == m_mapPktAnalysis.end())//m_mapPktAnalysis是在new GameChannel的时候就已经绑定好了 { //[]测试 //m_map->onCmd(data, len); return false;//表示不是GS这一层的包,是map server里面的包 } return it->second(Ptl.content, Ptl.size);//调用相应的绑定函数// return true;}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);}

 

转载于:https://www.cnblogs.com/zzyoucan/p/4117140.html

你可能感兴趣的文章
SharePoint 2010 类似人人网站内信功能实施
查看>>
CF 327E(Axis Walking-状态压缩Dp-lowbit的使用)
查看>>
object对象java 利用反射 从数据库取出数据对象list 类似hibernate
查看>>
插入返回ibatis 的selectKey 实现插入数据后获得id
查看>>
vim 程序编辑器
查看>>
LIS(单调队列优化 C++ 版)(施工ing)
查看>>
如何为winform程序打包(图解)
查看>>
如何给行内元素设置宽高?
查看>>
刚接触Vuex
查看>>
四种加载React数据的技术对比(Meteor 转)
查看>>
Airthmetic_Approching
查看>>
操作文本文件
查看>>
公司项目的几个问题
查看>>
解决win7下打开Excel2007,报“向程序发送命令时出现问题”的错误
查看>>
Velocity快速入门教程
查看>>
Google的小秘密
查看>>
(转)什么是JSON+如何处理JSON字符串
查看>>
(译)理解python线程
查看>>
【总结】动态树
查看>>
【vuejs深入二】vue源码解析之一,基础源码结构和htmlParse解析器
查看>>