zoukankan      html  css  js  c++  java
  • 项目分析(channelid是如果产生的)

    channelid如何生成的
    ///////////////////////////////////////////////////////////////
    //
    // I_TCPServer.h                   
    // Description:    
    //    
    ///////////////////////////////////////////////////////////////
    #pragma once
    #ifndef _ChannelIDGenerator_H
    #define _ChannelIDGenerator_H
    
    #include <queue>
    #include <windows.h>
    class ChannelIDGenerator
    {
    public:
        ChannelIDGenerator()
        {
            m_size = 0;
        };
        ~ChannelIDGenerator(){};
    
    private:
        std::queue<int> m_ids;
        int m_size;
    public:
        void init(int start, int size)
        {
            if(m_size)
                MessageBox(NULL, L"init m_size超出范围", L"重大错误freeId(int id)", MB_OK);
            m_size = size;
            for (int i = start; i < start + m_size; i++)
            {
                m_ids.push(i);
            }
        }
        int getId()
        {
            if(m_ids.empty())
                return -1;
            int id = m_ids.front();
            m_ids.pop();
            return id;
        }
        void freeId(int id)
        {
            if(id < 0 || id > m_size)
                MessageBox(NULL, L"channel id超出范围", L"重大错误freeId(int id)", MB_OK);
            m_ids.push(id);
            if((int)m_ids.size() > m_size)
            {
                MessageBox(NULL, L"channel id超出范围", L"重大错误freeId(int id)", MB_OK);
                int debug = 0;
            }
        }
        int getSize()
        {
            return m_size;
        }
    };
    
    #endif
    可以看出这个channelid是由队列中产生的
    刚开始的时候插入12000个,每连接一个玩家的时候从front一个,每下线一个会push一个
    刚开始的时候我以为这个队列不会乱,但发现会乱的,但这个没关系只要不会出现两个玩家的channelid一样就行了
    如果上线的玩家大于12000的时候,我实验了一下发现每次front的时候都是-1,所以这个会造成channelid会重复,而服务器发送消息就是通过这个channelid发送的肯定会出错
  • 相关阅读:
    C++模板&泛型编程
    C++继承
    测试pc大、小端
    C语言标准定义的32个关键字
    *塔,菱形
    练习小题目
    c一些关键字
    uvaoj 489
    uvaoj1339
    hdu1969Pie(根据体积二分,分馅饼)
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/3893444.html
Copyright © 2011-2022 走看看