zoukankan      html  css  js  c++  java
  • 再看GS接包过程

    再看GS接包过程
    bool GameServer::ProcessLoop(packet& rPkt)
    {
        if(false == m_spDataLayer->Recv(rPkt))
            return true;//没数据了
        
        if(rPkt.is_data)
        {
            if(!rPkt.data)
                return false;
    
            GameChannel* pGC = m_vecChannel[rPkt.channel_id];
            if(pGC)
                pGC->OnReceiveData(rPkt.data, rPkt.size);//回调GC中相关函数
        
            m_LiveMgr.OnLive(rPkt.channel_id);
        }
        else
        {
            //网络事件
            link_stat stat = (link_stat)rPkt.size;
            if (stat == link_stat::link_connected)
            {
                GameChannel* pNewGC        = new GameChannel();
                pNewGC->m_nChannelId    = rPkt.channel_id;
                pNewGC->m_pDataLayer    = m_spDataLayer.get();//m_pDataLayer,GC直接发包到客户端
                pNewGC->m_pShare        = this;
                pNewGC->m_pAsynDBC        = this->m_spAsynDBC.get();//GC直接跟数据库打交道
    
                m_vecChannel[rPkt.channel_id] = pNewGC;            
                m_LiveMgr.Add(rPkt.channel_id);
            }
            else if (stat == link_stat::link_disconnected || stat == link_stat::link_connect_failed )
            {
                GameChannel* pDisconnectGC = m_vecChannel[rPkt.channel_id];
                if (pDisconnectGC)
                {
                    //如果进入了地图,保存人物信息时会调用push_freeQueue + 滞空m_Channels[channel_id],
                    pDisconnectGC->OnDisconnect();//做人物下线收尾工作,该通知map,数据库访问操作,等,根据玩家的状态来
    
                    //如果未进地图就下线,直接断开;不用保存角色详细数据,可直接放入释放队列中
                    if (!pDisconnectGC->m_pMap)//如果进入地图需要从map返回数据然后保存数据库
                    {
                        AutoFreeGC(pDisconnectGC);//如果没有数据库访问直接释放,或者放到队列等无数据库访问在释放
                    }
                }
                m_LiveMgr.Remove(rPkt.channel_id);
            }
        }
        return false;
    }
  • 相关阅读:
    js获取盒子scrollTop
    获取浏览器宽度,自适应屏幕
    js切割字符串
    有向图的欧拉路径POJ2337
    欧拉回路和欧拉路径
    HDU 4462(暴力枚举)
    HDU 4455(dp)
    鸽巢原理入门
    HDU 4819 Mosaic(二维线段树)
    POJ 1330 Nearest Common Ancestors(LCA模板)
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/4147687.html
Copyright © 2011-2022 走看看