zoukankan      html  css  js  c++  java
  • GS玩家登录

    玩家上线
    这个过程看了很多很多次了,这里在看下
    客户端打开,服务器收到libevent事件,然后new Channel这个过程都付给他各种指针,然后放到channel容器中
    1.客户端发送c2s_login
    服务器发送s2c_login
    并带以下结果
    enum LoginEnum
    {
        LoginSuccess,
        LoginPasswordOrUserError,
        LoginUserNotExist,
        LoginUserIsOnline, //用户已在线
    };
    1.根据用户名查询id,如果没有返回LoginUserNotExist
    2.如果有在去查询用户信息,然后匹配密码,如果不正确
    发送LoginPasswordOrUserError
    成功就发送LoginSuccess
    3.登录成功之后发送角色列表
    这步走的是json,感觉可以改成结构体,json解析封装太慢
    
    2.客户端发送c2s_select_actor
    服务器根据id到数据库获取actorinfoex
    {//给客户端发送本地玩家信息s2c_local_player_info,其实就是客户端玩家,其实这个刚知道,其实是通过这个消息发送登录玩家信息
        LocPlayerInfo info;
        InitLocalPlayer(rActorEx, info);
        SendCmd(s2c_local_player_info, &info, sizeof(info));
    }
    3.将玩家加载到map中
    m_pMap->Gs2MsData(gs2ms_add_player, m_nChannelId, (void*)&rActorEx, sizeof(rActorEx));
    GameMap专门负责地图的所有东西,和GS之间通过内部协议通信
    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);//
    }
    
    void ThrTransData::PushPkt(MapPkt Pkt)
    {
    #ifdef BOOST_LOCKFREE
        for (;;)
        {
            if(m_gs2msPkts2.push(Pkt))
                break;
            boost::this_thread::interruptible_wait(1);
        }
    #else
        {
            std::lock_guard<std::mutex> lock(m_mtxGs2Ms);
            m_queGs2MsPkts.push(Pkt);
        }
    #endif
    };
    
    //...
            else if(gs2ms_add_player == pkt.cmd)//在MS里面还有大量的事情要做,才能进入地图,回头再看
            {
                PlayerChannel* pPC = new PlayerChannel(this);
                //加到地图中,但是并未激活该玩家
                int nChannelId = pPC->OnPlayerEnter(pkt.data, pkt.len);
                m_vecPlayerChannel[nChannelId] = pPC;
                AddPlayer(nChannelId);        
            }
    //...
    
    
    c2s_login  s2c_login
    s2c_json  角色列表
    c2c_select_actor 
    s2c_local_player_info
    然后将玩家放到MS中
  • 相关阅读:
    H3C BGP配置10BGP安全功能典型配置举例
    H3C BGP配置9调整和优化BGP网络典型配置举例1BGP负载分担配置
    H3C BGP配置11 BGP网络的可靠性典型配置举例1BGP GR配置
    H3C BGP配置9调整和优化BGP网络典型配置举例2BGP AddPath配置
    vue移动端适配postcsspxtorem
    .net 技术站点(转载)
    邯郸.net俱乐部
    存储过程从入门到熟练(多个存储过程完整实例及调用方法)_AX 转载
    gridview中删除记录的处理
    邯郸.NET俱乐部正式成立了
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/4117523.html
Copyright © 2011-2022 走看看