项目分析(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 = ;
};
~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 -;
int id = m_ids.front();
m_ids.pop();
return id;
}
void freeId(int id)
{
if(id < || 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 = ;
}
}
int getSize()
{
return m_size;
}
}; #endif
可以看出这个channelid是由队列中产生的
刚开始的时候插入12000个,每连接一个玩家的时候从front一个,每下线一个会push一个
刚开始的时候我以为这个队列不会乱,但发现会乱的,但这个没关系只要不会出现两个玩家的channelid一样就行了
如果上线的玩家大于12000的时候,我实验了一下发现每次front的时候都是-,所以这个会造成channelid会重复,而服务器发送消息就是通过这个channelid发送的肯定会出错
项目分析(channelid是如果产生的)的更多相关文章
- iOS项目分析及优化
iOS项目分析及优化 来源:吴白的简书 从代码看一个程序员的笔力 从代码的整洁度上就可以看出一个程序员的实力,规范其实就是让你养成一种良好习惯的标杆,在此面前我们应该顺从.本篇我们以OC为例,统 ...
- 项目分析_xxoo-master
项目介绍:使用java1.5的原生xml操作类实现 对象<-->xml字符串的相互转化 项目分析:主要分为是三个部分 1.容器类:AbstractContainer 存储x ...
- 织梦channelid是什么?dede channel typeid有什么区别
昨儿帮小伙伴整dedecms首页调用栏目文章,当时没注意用到的是channelid参数,修改了好多次赋值,新建了一个新的栏目获取id是156,添加栏目文章,把channelid改为156重新生成首页, ...
- std::vector<Channel2*> m_allChannels;容器,以及如何根据channelid的意义
std::vector<Channel2*> m_allChannels;容器,以及如何根据channelid的意义 这个容器保存了所有客户端连接的channel Channel2* Li ...
- 【项目分析】利用C#改写JAVA中的Base64.DecodeBase64以及Inflater解码
原文:[项目分析]利用C#改写JAVA中的Base64.DecodeBase64以及Inflater解码 最近正在进行项目服务的移植工作,即将JAVA服务的程序移植到DotNet平台中. 在JAVA程 ...
- ABP项目依赖图,根据自已生在的Demo项目分析而得
根据自已生在的Demo项目分析而得 在线学习代码库:https://github.com/AtwindYu/ABPStudy
- hadoop项目实战--ETL--(一)项目分析
项目描述 一 项目简介 在远程服务器上的数据库中有两张表,user 和order,现需要对表中的数据做分析,将分析后的结果再存到mysql中.两张表的结构如下图所示 现需要分析每一天user和,ode ...
- 学习不一样的vue实战(2): 项目分析
学习不一样的vue实战(2): 项目分析 首先 首发博客: 我的博客 项目源码: 源码(喜欢请star) 项目预览: 预览 上一章: <学习不一样的vue(1)实战:环境搭建> 我的Q群: ...
- ATM项目分析
ATM项目分析 项目源代码下载 其实本项目的需求分析乍一看比较复杂,但是细细拆分出来实际实现还是比较容易的.基本用上前面所学的所有知识点. 1.额度 15000或自定义 2.实现购物商场,买东西加入购 ...
随机推荐
- c#判断网络连接状态示例代码
使用c#判断网络连接状态的代码. 代码: public partial class Form1 : Form { [DllImport() == true) { label1.Text = " ...
- 一个php函数,能够遍历一个文件夹下的所有文件和子文件夹
<?phpfunction my_scandir($dir){ $files=array(); if(is_dir($dir)) { if($handle=op ...
- 一,U盘安装 CentOS 6.5 minimal
U盘安装盘: CentOS-6.5的版本有四个,分别是: 1.CentOS-6.5-i386-netinstall.iso 通过网络安装的,需要联网 2.CentOS-6.5-i386-minimal ...
- jquery 匹配select下拉框与列表框
今天工作中用到 GrapyCity 的 wijmo ui 控件. 要给系统中所有类型的控件加统一样式 用法 $("input [type='text']").wijtext(); ...
- 在Unity项目中使用Git
(搬运自我在SegmentFault的博客) 本文参考了Unity官网的Mastering Unity Project Folder Structure - Version Control Syste ...
- mysql外键设置(待测试)
外键的定义语法:[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...) REFERENCES tbl_name (index_col ...
- SQLite数据库与Contentprovider(1)
SQlite:类似mysql的数据库.把数据保存到.db文件夹中. Contentprovider:一般用于不同进程之间的数据共享(两个APP). 手动建库:http://www.runoob.com ...
- AIDL与service
Service:Local service,一个进程中的多线程服务. AIDL:remote service,不同进程间通信. Service启动方法: startService():调用方destr ...
- 直播源格式转换教程——rtmp/rtsp/http/m3u8!!
之前寻找直播源,发现好多rtmp开头的,或者是rtsp开头的,但是ATV里面的个人链接是支持m3u8格式的.怎么办?小编发现了几个规律,网友可作参考.现在流行的直播地址差不多就这几种需要说明的是并不是 ...
- squid判断文件是否修改机制分析
前提: 1.我写了一个简单的http服务器,以下简称 httpserver 2.前端使用squid做反向代理,以下简称 squid.squid同时反向代理了2台http服务器,其中一台是httpser ...