首页 > 代码库 > share(发包方面)
share(发包方面)
share(发包方面)接收所有map发过来的包,这个是GS线程驱动的{ for (;;) { //... if(!itMap.second->RecvData(Pkt)) break; if(Pkt.cmd == ms2gs_转client_cmd) { OnTurnToClient(Pkt.channelId, Pkt.data, Pkt.len); } 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); } //... }}有自己模块是跨地图的道具,帮会,商城,组队,因为某些操作是与哪张地图关系是不大的,所以就将其做成跨地图模式InitAcrossMapOpt();//跨地图操作InitAcrossManager();//跨地图管理器这些操作还是管理器都是从map发过来的包,所以还是从这个循环中去接包,根据内部协议,转到相应跨地图模块或者在share这层处理,等跨模块处理完相应处理之后想MS或者Client发包,跨地图模块本身是不发送消息的,他要通过share这层去发如:Events.SendAucOpt2Ms = [this](int nChannelId, void* pData, int nLen){ SendCmd2MsByChannelId(nChannelId, gs2ms_auction, pData, nLen);};void Share::SendCmd2MsByChannelId(int nChannelId, int nCmd, void* pData, int nLen){ GameChannel* pGC = m_vecChannel[nChannelId]; if (!pGC) return; pGC->m_pMap->Gs2MsData(nCmd, nChannelId, pData, nLen);//通过玩家对应map去发送}发送到客户端也是如此,毕竟所有玩家通道和map信息都在share这边所以接包是在share中接的,发送还是从share中发送出去的
share(发包方面)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。