12 2014 档案
摘要:enum SM_DBModifyOpt{ eSM_DB_Add, eSM_DB_Update, eSM_DB_Del,};char c = {0};//111---删除|更新|增加bool IsOpt(int eOpt, char c){ return (c >> eOpt ...
阅读全文
摘要:这段时间被数据库共享内存坑毁了,搞了半天犯了一个大错误,今晚才发现,经理的思路好像也不太适合我们项目。一个字坑。
阅读全文
摘要:GS与MS之间通信注意GS与MS是两个线程,现在是每个map一个线程,他们之间是内部协议进行通信的,那既然是两个线程那如何通信呢,看了net进程通信这个就比较简单了举个例子m_pMap->Gs2MsData(gs2ms_add_player, m_nChannelId, (void*)&rActor...
阅读全文
摘要:关于function的一种常用用法void Share::InitAcrossManager(){ GsMgrEvent gsMgrEvents;//保存function的结构体 gsMgrEvents.fnSendData2Client = [this](int nChannelId,...
阅读全文
摘要:share(发包方面)接收所有map发过来的包,这个是GS线程驱动的{ for (;;) { //... if(!itMap.second->RecvData(Pkt)) break; if(Pkt.cmd == ms2gs...
阅读全文
摘要:小退1.将玩家角色置为登录状态 2.向MS发送del_player消息,同步玩家信息3.向GS发送ms2gs_db_buff_info消息,同步本地玩家数据,发送角色列表大退根据玩家状态做相应处理如果进入地图就向地图发送下线消息,没有进入地图就放入自动释放队列中向GS发送保存消息,保存数据库删除在线...
阅读全文
摘要:GameServer号称游戏服务器,是整个服务器的控制其中驱动的东西很多,网络:DataLayer,接收所有map发到GS过来的包,从网络层接报,数据库:DB,数据库回调驱动,玩家:GameChannel,玩家接报,道具,帮会等定时保存,几个定时器管理,帮助GC发送未发送的数据,所有的工作都是在GS...
阅读全文
摘要:在看MS人物上线else if(gs2ms_add_player == pkt.cmd){ PlayerChannel* pPC = new PlayerChannel(this); //加到地图中,但是并未激活该玩家 int nChannelId = pPC->OnPlayerE...
阅读全文
摘要:关于地图加载.map文件记录了格子大小为107*160,关于.map文件时如何生成的我也不清楚,.map文件中已经有二维大小以及整个阻挡信息(0:无阻挡,1:阻挡,2:透明0)/** *m_nMapWidth 地图宽 *m_nMapHight 地图高 *m_dvecCollsion 地图阻挡信息 *...
阅读全文
摘要:玩家移动//好长时间没看这些,好多都看不懂了void Map::UpdatePlayerPos(TgtPos pos, PlayerInfo* pl){// m_pLog->Logs(eLogLevel_Warning, "人物移动"); // 检查位置包 auto& mpos =...
阅读全文
摘要:1.在GS这边发送(本地玩家信息) LocPlayerInfo info; InitLocalPlayer(rActorEx, info); SendCmd(s2c_local_player_info, &info, sizeof(info));这个LocPlayerInfo好像内容比较多struc...
阅读全文
摘要:小退void GameChannel::OnLogOut(){ if(m_eGameState != eGameState_EnterMap)//小退玩家肯定是进入地图状态 return; ClearMapRcd();//清除地图相关记录,实现就是给相应地图 ...
阅读全文
摘要:GS发包到MS(GS,MS包交互过程)例:人物上线首先看看其实如何确定是哪张地图的数据库首先只保存一个mapid在share初始化的时候已经初始化了所有map,并保存了map的指针信息,其key就是mapidif(rActorEx.GetMapID() TGetnBodyId(rActorEx.Ge...
阅读全文
摘要:要看懂share先看与map的交互以及跨地图的交互share初始化void Share::ShareInit(I_DataLayer* data_layer){ // 加载xls表 if(!LoadnBodyId())//两种性别,三种职业 Plug::PlugMessag...
阅读全文
摘要:与网络打交道在GS,GC,Share都与网络打交道,但还是GC最多GC打交道过程send_stat BaseChannel::SendCmdTry(){ if (!m_queCmd.size()) return send_stat::send_succeed; for(;;...
阅读全文
摘要:GS与数据库打交道link_stat stat = (link_stat)rPkt.size;if (stat == link_stat::link_connected){ GameChannel* pNewGC = new GameChannel(); pNewGC->m...
阅读全文
摘要:再看GS接包过程bool GameServer::ProcessLoop(packet& rPkt){ if(false == m_spDataLayer->Recv(rPkt)) return true;//没数据了 if(rPkt.is_data) { ...
阅读全文
摘要:再看GS线程void GameServer::ProcessThreadTry(){ int nCount = 0; packet rcvPkt; rcvPkt.data = new char[1024 * 100]; //该事件工厂主要创建了两个定时器1.livemgr的检...
阅读全文
摘要:GS给客户单发包以及m_queGcWait(所有GC共享)send_stat BaseChannel::SendCmd(int nCmd, void* pData, int nLen){ Protocol Ptl; Ptl.cmd_type = nCmd; Ptl.conte...
阅读全文
摘要://最近数据库存储做了重大改变,数据库内部的回头再说,先看看GS这边的1.现在感觉数据库的状态将请求包放入命令队列中,以前是全部放进去,这样让其他的数据库操作不会随着数据库定时器而变慢,GS线程去驱动,一分钟不太可能还存不完2.差异更新,GS只获取更改了的记录,这样不用每次都把全部的记录都放进去,这...
阅读全文
摘要:/** * boost::noncopyable 实现单例不用麻烦了,直接从这个继承就行了 */#include class myclass : public boost::noncopyable{public: myclass(){}; myclass(int i){}; ...
阅读全文
摘要:#include #if 0//函数模板templateT max(T a, T b, T c)//函数模板{ if (a class Compare{public: T max(T a, T b); T min(T a, T b);};templateT Compare::max...
阅读全文