zoukankan      html  css  js  c++  java
  • GS踢玩家下线功能

    GS踢玩家下线功能
        //key:userId, val:nChannelId (当前在线用户)
        std::map<int, int>                    m_mapOnLineUserByUid;        ///< 当前在线用户,用户Id,对应ChannelId
    
        //所有在线的玩家通道
        std::vector<GameChannel*>            m_vecChannel;                ///< 所有在线玩家连接
        主要就是通过这两个容器实现
    
    if(0 == strncmp(User.m_szUserPwd, m_pUserInfo->m_szUserPwd, MAX_NAME_LEN))//用点击登录成功
    {
        // Kick the same user
        GameChannel* pGC = m_pShare->GetGcByUid(m_UserId);
        if(pGC)    
        {
            //也许对于刚来的我pGC != this这个肯定是看不懂的,现在就好多了,其实指针就是地址,他也是一个变量,值是地址和int差不多
            //只是赋予它操作内存的功能,我看他的值0x0044fbcc应该和int差不多,所有这样直接比较就相当于int比较可以
            if(pGC != this)//同客户端重复登录不提下线,就是同一个客户端不停地点击登录他还是同一个channel,无需踢下线
                m_pShare->KickLink(pGC);//不同客户端重新new channel了
            else//相同客户端
                return;
    
        }
            
        // Login Successed!
        m_eGameState = eGameState_Login;
        m_pShare->AddOnLineUser(m_UserId, m_nChannelId);//将userid,channelid放入m_mapOnLineUserByUid在线容器中,下次就能查找了
        LoginEnum ret = LoginSuccess;
        SendCmd(s2c_login, &ret, sizeof(LoginEnum));
        SendActorListAsyn(m_UserId);
    }
    
    GameChannel* Share::GetGcByUid(int nUserId) const
    {
        int nChannelId = GetChannelIdByUid(nUserId);//根据user查找channelid
        if(nChannelId == -1)
            return nullptr;
        return GetGcByChannelId(nChannelId);//根绝channelid查找用户指针
    }
  • 相关阅读:
    WinCMD color命令
    WinCMD if命令(批处理Dos 大于、小于、等于)
    WinCMD 常用命令
    AIFramework基本概念整理
    AICompiler动态shape编译框架
    深度学习编译与优化Deep Learning Compiler and Optimizer
    NNVM Compiler,AI框架的开放式编译器
    Tengine AIFramework框架
    Tvm一些基本技术
    北汽蓝谷和北汽新能源
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/4127470.html
Copyright © 2011-2022 走看看