GS与数据库打交道
GS与数据库打交道
link_stat stat = (link_stat)rPkt.size;
if (stat == link_stat::link_connected)
{
GameChannel* pNewGC = new GameChannel();
pNewGC->m_nChannelId = rPkt.channel_id;//客户端唯一标识
pNewGC->m_pDataLayer = m_spDataLayer.get();//GC直接发包到客户端
pNewGC->m_pShare = this;//我知道share是所有玩家,所有地图,但具体GameServer与Share什么关系还不清
pNewGC->m_pAsynDBC = this->m_spAsynDBC.get();//GC访问数据库 m_vecChannel[rPkt.channel_id] = pNewGC;//放到玩家通道中
m_LiveMgr.Add(rPkt.channel_id);
}
else if (stat == link_stat::link_disconnected || stat == link_stat::link_connect_failed )
{
GameChannel* pDisconnectGC = m_vecChannel[rPkt.channel_id];
if (pDisconnectGC)
{
//如果进入了地图,保存人物信息时会调用push_freeQueue + 滞空m_Channels[channel_id],
pDisconnectGC->OnDisconnect();//处理玩家下线工作,包括地图,感觉这个只是处理GS这边的 //如果未进地图就下线,直接断开;不用保存角色详细数据,可直接放入释放队列中
if (!pDisconnectGC->m_pMap)//这需要看人物下线MS怎么发包过来,处理什么事情了,没进入地图就不需要等MS发数据过来然后GS保存
{
AutoFreeGC(pDisconnectGC);//释放GC,这个需要没有数据库返回才去释放
}
}
m_LiveMgr.Remove(rPkt.channel_id);
} bool GameChannel::OnReceiveData(void* pData, int nLen)
{
if (!BaseChannel::OnReceiveData(pData, nLen))//感觉在BC里面处理那些最基本的功能
{
if(m_eGameState != eGameState_EnterMap)
return false; m_pMap->Gs2MsData(gs2ms_转client_cmd, m_nChannelId, pData, nLen);
}
return true;
} bool BaseChannel::OnReceiveData(void* data, int len)
{
Protocol Ptl = {};
if(!Ptl.from_buffer(data, len))
return false; auto it = m_mapPktAnalysis.find(Ptl.cmd_type);//m_mapPktAnalysis是在GC里面绑定的,然后再BC里面回调,这种用法还真不熟
if(it == m_mapPktAnalysis.end())
return false; return it->second(Ptl.content, Ptl.size);
} 看看其是怎么访问数据库的
bool GameChannel::OnLogin(void* pData, int nLen)
{
struct UserInfo
{
int userID; //对应数据库中的_id
char userName[]; //用户名
char userPwd[]; //用户密码
}; if(m_eGameState != eGameState_OnlyConnect)
return false;
UserInfo* info = (UserInfo*)pData;
//m_fnGetUserID一个function,function就相当于函数指针,函数地址是存储在代码区里面,也是有地址的,将这个指针传到ASYNDB,然后回调这个指针,也是可以
m_pAsynDBC->GetUserID(&m_fnGetUserID ,info->userName);//这样直接放个命令到数据库,在回调,服务器不用去等待结果,这个也是比较基本的用法了,刚开始搞几天都不太理解
IncDBAsk(); m_pUserInfo = new ShuiHu::UserInfo;
strncpy(m_pUserInfo->m_szUserPwd, info->userPwd, MAX_NAME_LEN);
return true;
}
GS与数据打交道不多就是GameServer打开的时候获取道具,帮会信息,最主要的是那个m_spAsynDBC->Drive();驱动回调
//其实总结起来就是每个GC有个数据库的指针,然后每次绑定一个GC的函数,然后数据库回调,当然每个类的对象的函数都有地址空间的,对应于这个地址空间不熟
GS与数据库打交道的更多相关文章
- GS与网络打交道
与网络打交道 在GS,GC,Share都与网络打交道,但还是GC最多 GC打交道过程 send_stat BaseChannel::SendCmdTry() { if (!m_queCmd.size( ...
- 【程序员技术练级】学习一门脚本语言 python(三)跟数据库打交道
接着上一篇,该篇讲述使用python对数据库进行基本的CRUD操作,这边以sqlite3为例子,进行说明.sqlite3 是一个非常轻型的数据库,安装和使用它是非常简单的,这边就不进行讲述了. 在py ...
- 再看GS接包过程
再看GS接包过程 bool GameServer::ProcessLoop(packet& rPkt) { if(false == m_spDataLayer->Recv(rPkt)) ...
- Oracle 数据库SQL性能查看
作为一个开发/测试人员,或多或少都得和数据库打交道,而对数据库的操作归根到底都是SQL语句,所有操作到最后都是操作数据,那么对sql性能的掌控又成了我们工作中一件非常重要的工作.下面简单介绍下一些查看 ...
- 从C#到Objective-C,循序渐进学习苹果开发(7)--使用FMDB对Sqlite数据库进行操作
本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本篇主要开始介绍基于XCod ...
- PHP访问MySql数据库介绍
在网站后台,经常要与数据库打交道.本文介绍如何使用XAMPP来管理MySql数据库及如何用PHP来访问MySql数据库. 一.使用XAMPP来管理MySql数据库 首先使用XAMPP打开MySql的管 ...
- java jdbc 连接mysql数据库 实现增删改查
好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打 ...
- MyBatis知多少(13)MyBatis如何解决数据库的常见问题
在现代软件项目中数据库通常被认为是遗留组件.它们一直以来都被认为难以使用,不论是出于技术的还是非技术的原因.大多数软件开发人员宁可从头开始完完全全地重建一个数据库. 如果数据库是遗留下来的,相信一些开 ...
- MySQL数据库学习笔记(十一)----DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
随机推荐
- github 获取repo 发布的版本号
获取最新版本 https://api.github.com/repos/nickchou/paopao/releases/latest 获取版本列表 https://api.github.com/re ...
- LeetCode OJ--Merge Intervals @
https://oj.leetcode.com/problems/merge-intervals/ 合并区间 //排序 sort(intervals.begin(),intervals.end(),C ...
- ViewAnimator实现复杂的动画效果
咱们先看个原生的 AnimatorSet animatorSet = new AnimatorSet(); animatorSet.playTogether( ObjectAnimator.ofFlo ...
- Codeforces 最大流 费用流
这套题目做完后,一定要反复的看! 代码经常出现的几个问题: 本机测试超时: 1.init函数忘记写. 2.addedge函数写成add函数. 3.边连错了. 代码TLE: 1.前向星边数组开小. 2. ...
- 4C 2018 倒数的字符序列
输入L,N 将长度为L的小写字符串序列,比如L=3,序列为aaa,aab,aac,...aba,...zzz,求倒数第N个字符串序列是什么.输入3 7421 得到pat 第一感觉是A,B,C...,Z ...
- Java---杨辉三角简易解法(通俗易懂,逻辑严密)
- 基于Tiny4412的I2C驱动分析
本文以tiny4412平台上到三轴加速度器为例简单分析了Linux下到i2c驱动编程. http://pan.baidu.com/s/1c0H5vRq
- Usage of API documented as @since1.6+
Usage of API documented as @since1.6+ File ->Project Structure->Project Settings -> Modules ...
- Windows下ELK-5.4.3环境搭建
Windows下ELK-5.4.3环境搭建 一.概述 ELK官网 https://www.elastic.co ELK由Elasticsearch.Logstash和Kibana三部分组件组成: El ...
- 转:GRADLE构建最佳实践
转自: http://www.figotan.org/2016/04/01/gradle-on-android-best-practise/#section-2 随着谷歌对Eclipse的无情抛弃和对 ...