首页 > 代码库 > 项目分析(channelid是如果产生的)

项目分析(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发送的肯定会出错