share到底干什么的
//--------------------打开GameServer,share中加载-------------------------
.加载nBodyID
//玩家的nBodyID表([职业][性别][nboduid])
std::vector<std::vector<int> > m_nbodyid_table;
if(!load_nbodyid())
Plug::PlugMessageBox("加载nBodyID表失败啊!"); .加载人物等级信息
//玩家等级基础信息([职业][等级][等级信息])
std::vector<std::vector<ActorLevelInfo> > m_level_info_vec;
if(!load_level_info())
Plug::PlugMessageBox("加载角色等级信息失败!"); //获取地图信息
std::map<int, MapData> m_mapdata_table;
if(!load_mapdata())
Plug::PlugMessageBox("加载地图数据失败!"); for(auto iter_map : m_mapdata_table)
{
auto& map = m_maps[iter_map.first] = NEW(Map);//创建map
map->init(get_max_gc_numb(), iter_map.second.map_path.c_str());//初始化map里面的很多东西,有待详解
map->m_get_level_info = std::bind(&Share::getLevelInfo, this, ph::_1, ph::_2, ph::_3); map->mapId = iter_map.first;
std::wstring name = L"地图";
name += boost::lexical_cast<std::wstring>(map->mapId);
onThrID(map->getThrID(), name); //获取线程ID
}
m_pDataLayer = data_layer;//用于发送包到客户端
//---------------------------上线玩家--------------------------------
m_share->add_player2(m_actor_id, mapID, m_actor_name);//需要将玩家加入到这两个容器中
void Share::add_player2(int actID, int mapID, const std::string& name)
{
m_all_player[actID] = mapID;
m_name_info[name] = actID;
}
//--------------------------玩家下线-----------------------------------
void Share::del_player2(int actor_id, const std::string& name)
{
m_all_player.erase(actor_id);//从这两个容器中删掉
m_name_info.erase(name);
} //-------------------------其他一些跨地图的操作------------------------
如:聊天,还有就是玩家切换地图的操作,等于说是share保存的是所有地图的信息,以后也会有相应的跨地图的操作放在这里面
//--------------------------最后一个最重要的操作,就是接受map中的消息--------------------
void Share::procMapSendData()
{
for(auto map : m_maps)
{
MapPkt pkt;
for (;;)
{
if(!map.second->revData(pkt))
break;
if(pkt.cmd == ms2gs_转client_cmd)
{
m_pDataLayer->send_data(pkt.channel_id, pkt.data, pkt.len);
}
else if(ms2gs_db_buff_info == pkt.cmd)
{
//玩家下线,保存数据到DB
auto channel = m_Channels[pkt.channel_id];//看来share里面保存了所有的channel信息
channel->OnSaveData(pkt.data, pkt.len); //注意:小退不断开连接
if(channel->isDisconnect())
{
//放入释放队列中,断开
push_freeQueue(channel);
m_Channels[pkt.channel_id] = NULL;
}
}
else if(ms2gs_obj_leave == pkt.cmd)//玩家切换地图
{
int tgtMapID = -;
std::stringstream ss;
ss.write((char*)pkt.data, pkt.len);
boost::archive::binary_iarchive ia(ss);
ia >> tgtMapID; //进入新地图
auto newMap = getMapByMapID(tgtMapID);
newMap->gs2msData(gs2ms_add_player/*gs2ms_obj_enter*/, pkt.channel_id , (void*)ss.str().c_str(), ss.str().size());
auto gc = m_Channels[pkt.channel_id]; //->m_map = newMap;
gc->m_map = newMap; //修改地图
m_all_player[gc->getActorID()] = tgtMapID; //放入在线玩家容器 ////激活玩家【应客户端处理】
//Protocol ptl = {0};
//ptl.cmd_type = c2s_activate_player;
//ptl.content = nullptr;
//ptl.size = 0;
//std::vector<char> buffer;
/ffer.resize(sizeof(Protocol));
//int send_len = ptl.to_buffer(&buffer[0], buffer.size());
//newMap->gs2msData(gs2ms_转client_cmd, pkt.channel_id, &buffer[0], send_len);
}
delete[] pkt.data;
pkt.data = nullptr;
}
}
}
/*share里面保存了所有的map信息,保存所有上线玩家的部分信息,所有的channel信息,我就有个疑问了为什么GameServer要继承
share,难道只是因为需要在在GS线程中处理procMapSendData(),那也不用完全继承share啊,我就去问队长,得到的回答是
GameServer管理所有的channel,而所有的channel保存在share中,所以这样就继承了,其实也不用继承share,直接把channel信息放到GameServer中也可以
这算是疑问,待我在看看*/

share干什么的的更多相关文章

  1. LA 3231 - Fair Share

    You are given N processors and M jobs to be processed. Two processors are specified to each job. To ...

  2. 重新想象 Windows 8.1 Store Apps (81) - 控件增强: WebView 之加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Contract 分享 WebView 中的内容, 为 WebView 截图

    [源码下载] 重新想象 Windows 8.1 Store Apps (81) - 控件增强: WebView 之加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Co ...

  3. linux下安装MySQL出错file /usr/share/mysql/charsets/latin2.xml from install of MySQL-......

    linux64 red hat 6.3企业版 开始错误装了32位mysql最后怎么也装不上64mysql了,折腾了一番最后全部卸载搞定: file /etc/init.d/mysql from ins ...

  4. sendEmail报错:at /usr/share/perl5/vendor_perl/IO/Socket/SSL.pm

    sendEmail发送邮件是出现以下报错: *******************************************************************  Using the ...

  5. iOS - Share 分享/第三方登录

    1.系统方式创建分享 按照下图在 Info.plist 文件中将 Localization native development region 的值改为 China.如果不设置此项弹出的分享页面中显示 ...

  6. share登录Samba可读可写(适合虚拟机下学习使用)

    直接配置 smb.conf ( path = /etc/samba/smb.conf ). 首先,进入到 samba 文件夹: cd /etc/samba/ 备份 smb.conf: mv smb.c ...

  7. Select for update/lock in share mode 对事务并发性影响

    select for update/lock in share mode 对事务并发性影响 事务并发性理解 事务并发性,粗略的理解就是单位时间内能够执行的事务数量,常见的单位是 TPS( transa ...

  8. file /usr/share/mysql/... conflicts with file from package mysql-libs-5.1.73-3.el6_5.x86_ 64 MySQL安装

    在CentOS 6.5安装MySQL 5.6.17,安装到最后一个rpm文件MySQL-server时 安装命令是:rpm -ivh MySQL-server-5.6.17-1.el6.x86_64. ...

  9. Filestream/Windows Share导致Alwayson Failover失败

    最近做了一个case, 客户在ALWAYSON环境下进行failover操作, 之后所有replica上的alwayson group状态变成了resolving. 并且在执行failover的rep ...

随机推荐

  1. Java 中的抽象类及接口

    抽象类使用 abstract 关键字修饰,该类即为抽象类. 抽象类的作用: 1.某些情况下,父类约束子类必须包含哪些方法,但不知道子类如何去实现这些方法. 2.可以从多个具有相同特征的类中抽象出一个抽 ...

  2. DNS笔记 DNS区域集成到 Active Directory

    可以将 DNS 区域集成到 Active Directory 中以提供增强的容错功能和安全性.OpenDNS   Google Public DNS往返时间 (RTT) 远程访问服务 (RAS)域名与 ...

  3. JS中cookie的基本使用

    cookie是本身是HTML中ducument中的一个属性,可以用来保存一些简单的数据信息,比如用户名.密码等,提高一些网站的用户体验度.下面就来简单的说说cookie,它有下面几个特性: 1.有过期 ...

  4. leetcode刷题笔记

    (1)Best Time to Buy and Sell Stock Total Accepted: 10430 Total Submissions: 33800My Submissions Say ...

  5. mysql开启全文索引功能

    注意:全文检索模块需要mysql开启全文索引功能,开启方法:修改mysql配置文件:window服务器为my.ini,linux服务器为my.cnf,在 [mysqld] 后面加入一行“ft_min_ ...

  6. SQL Server 基础之《学生表-教师表-课程表-选课表》

    一.数据库表结构及数据 建表 CREATE TABLE Student ( S# INT, Sname ), Sage INT, Ssex ) ) CREATE TABLE Course ( C# I ...

  7. Java并发编程实战---第六章:任务执行

    废话开篇 今天开始学习Java并发编程实战,很多大牛都推荐,所以为了能在并发编程的道路上留下点书本上的知识,所以也就有了这篇博文.今天主要学习的是任务执行章节,主要讲了任务执行定义.Executor. ...

  8. 九度oj 1521 二叉树的镜像

    原题链接:http://ac.jobdu.com/problem.php?pid=1521 水题,如下.. #include<algorithm> #include<iostream ...

  9. ios 中怎么自定义(RGB)背景色

    1.定义RGB 色彩.随机颜色 我的抽为宏定义.便于各个文件中使用 // 1.获得RGB颜色 #define MTColor(r, g, b) [UIColor colorWithRed:(r)/25 ...

  10. 教你怎么安装Redis

    以下命令以root用户运行:#cd /tmp/#wget http://redis.googlecode.com/files/redis-2.6.11.tar.gz#tar xzf redis-2.6 ...