zoukankan      html  css  js  c++  java
  • 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中发送出去的
  • 相关阅读:
    rest-framework之路由
    rest-framework之频率控制
    mysql 模糊查询 concat()
    解决spring使用动态代理
    MySQL巧用sum,case...when...优化统计查询
    解决maven项目中有小红叉的问题
    google ---gson字符串数组用GSON解析然后用逗号隔开拼接,去掉最后一个逗号
    Elicpse使用技巧-打开选中文件文件夹或者包的当前目录
    powdesigner建表
    遍历map
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/4175424.html
Copyright © 2011-2022 走看看