码迷,mamicode.com
首页 > 其他好文 > 详细

项目分析(channelid是如果产生的)

时间:2014-08-06 01:44:20      阅读:307      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   color   io   for   art   ar   

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发送的肯定会出错

 

项目分析(channelid是如果产生的),布布扣,bubuko.com

项目分析(channelid是如果产生的)

标签:des   style   blog   color   io   for   art   ar   

原文地址:http://www.cnblogs.com/zzyoucan/p/3893444.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!