2015-06-18 刘太华
gateway的初步想法 已有一套基于epoll event的框架, 打算gateway在这个基础上, 配合boost::asio做。雏形先做个socket proxy出来. TODO: 1,设计一个AsioClient类, 它是gw到后端具体gs的连接封装. AsioClient类想到2个方案: a, 在原来的面向玩家的SClientSocket类和AsioClient类之间做friend, asio_write, asio_read, asio_connect的callback中, 回调SClientSocket中的对应Write, Read达到与epoll 事件打通, 因此打通玩家到后端gs的proxy 继续阅读 »
2015-09-12 刘太华
游戏的场景服务和数据服务整合 一直以来都觉的现在运行的游戏后台服务, 实在太多了。 1,数据服务和场景服务之间的通信, 用的是消息队列zeroMQ来做的, 无形就多了一个消息队列服务, 然后还有一个处理队列任务的mq_worker, 然后数据服务到场景服务的通信. 2, 需要在每次需要的时候都建立一次本地的socket,就2个服务之间,产生了多余的好多事情。 继续阅读 »
2014-03-13 刘太华
I just want a drink c++通过swig暴露自己的API提供给python调用, 在我们的例子中生成的swig文件是 继续阅读 »
2015-05-09 刘太华
事件调度器模块 记录下我们游戏里事件调度器模块, 用处, 代码结构。 我们用来注册一些事件到调度器, 调度器在做update的时候, 会检查容器内的事件, 事件的封装, 包含senderObj, receiveObj, id, delayFrameCount等等。 如果当前帧已经符合delayFrameCount的要求了, 就执行receiveObj.RecieveEvent()方法,将senderObj注册事件时的参数等, 带入RecieveEvent方法执行。 继续阅读 »
2015-07-10 刘太华
一个自定的dynamic_cast设计 一个运行时检查的自设计dynamic_cast转换系统: - 包含2个预编译宏,CnDeclareRootRTTI 和CnDeclareRTTI, 宏的目的只是为了生成对应的代码, 实际手法和直接在类里码代码是一样意思; - 一个简单的RTTI类型,每个基类和派生类将会自带一个RTTI的实例属性: ms_RTTI, RTTI类如下: class CnRTTI { public: CnRTTI (const char* pcName, const CnRTTI* pkBaseRTTI); inline const char* GetName() const {return m 继续阅读 »
2015-05-06 刘太华
一个单线程的epoll server示例 这个示例是一个echo server, 将回显client端send的64字节. 代码在 echoEpollServer 在OSX下 gcc 4.6, linux 下编译可用, 默认被写死了监听8886端口. 继续阅读 »
2015-08-22 刘太华
工厂类回收资源和夸线程回调时对象是否还存在判断 虽然大多数逻辑都在单线程里实现, 但是不能避免的是一些IO阻塞类型逻辑, 不得不放入子线程里执行,当IO完成后boost:bind(callback, arg1, arg2 ...) 放入主线程队列内执行callback, 但是问题是,假如callback指向的对象函数的对象, 已经销毁了, 这时候就无法判断对象是否还存在了,不判断就会core dump. 继续阅读 »
2016-10-17 王财勇
模板函数应该将声明与定义放在一起 看如下例题: ``` //tem.h #ifndef _TEM_H #define _TEM_H template T add(T a, T b); //{ //return a+b; //} #endif //tem.cpp include "tem.h" template T add(T a, T b) { return a + b; } template int add(int, int);//实例化定义,必须放在模板定义的后面 //main.cpp include include "tem.h" using namespace std; int main() { 继续阅读 »
2015-06-12 刘太华
单线程游戏玩家数据加载方案 我们一直在使用单线程的场景服务器,基本符合由MUDOS发展而来的精简MMO场景服务的模型. 单线程的优点很明显, 安全, 简单, 逻辑清晰, 不会绕死自己的脑细胞, 避免很多多线程下的坑. 但是玩家的数据并不直接由gameserver(也就是scene server, 以下都简称gs)读取, 而是另外一个由python写的服务负责, 这个py服务负责所有玩家需要保存的数据的保存工作, 比如金币, 等级, 各种养成系统。 继续阅读 »
2015-07-18 刘太华
游戏碰撞场景(一) CoWorld构建过程 脑图 继续阅读 »