采用抽象类工厂的设计模式,将所有提供的类做了抽象:
如下:
#pragma once
////////////////////////////////////////////////////////////////////////////////
//! 提供服务器的监听,目的是开发人员可以自己数据
////////////////////////////////////////////////////////////////////////////////
class IServer;
class IServerListener
{
public:
/*------------------------------------------------------------------------------
@remarks:服务器成功建立
/------------------------------------------------------------------------------*/
virtual void onSetup(IServer* pSvr){};
/*------------------------------------------------------------------------------
@remarks:服务器运行事件
/------------------------------------------------------------------------------*/
virtual void onRun(IServer* pSvr){};
/*------------------------------------------------------------------------------
@remarks:服务器停止事件
/------------------------------------------------------------------------------*/
virtual void onStop(IServer* pSvr){};
/*------------------------------------------------------------------------------
@remarks:服务器错误处理事件
/------------------------------------------------------------------------------*/
virtual void onError(IServer* pSvr,ISessionPtr session,IBufferPtr buf,size_t nError){};
/*------------------------------------------------------------------------------
@remarks:服务器关闭退出
/------------------------------------------------------------------------------*/
virtual void onClose(IServer* pSvr){};
/*------------------------------------------------------------------------------
@remarks:当有连接进入,则调用该函数
@param:pSession当前会话
/------------------------------------------------------------------------------*/
virtual void onSessionEnter(IServer* pSvr,ISessionPtr pSession){};
/*------------------------------------------------------------------------------
@remarks:当有连接断开,则调用该函数
@param:pSession当前会话
@param nRes 断开的原因 目前 0
/------------------------------------------------------------------------------*/
virtual void onSessionLeaver( IServer* pSvr,ISessionPtr pSession,size_t nRes){};
/*------------------------------------------------------------------------------
@remarks:当接收到数据的时候调用该方法
@param:pSession当前会话
@param pData 接收到的数据,需要自己释放数据
@param nBuf :数据的大小
/------------------------------------------------------------------------------*/
virtual void onRecv( IServer* pSvr,ISessionPtr pSession,IBufferPtr buf,size_t nBuf){};
/*------------------------------------------------------------------------------
@remarks:消息被处理或者被执行通知
@param:pSession当前会话
@param pData 接收到的数据,需要自己释放数据
@param nBuf :数据的大小
/------------------------------------------------------------------------------*/
virtual void onDoTask( IServer* pSvr,ISessionPtr pSession,IBufferPtr buf,size_t nBuf){};
/*------------------------------------------------------------------------------
@remarks:发送数据的时候调用该方法
@param:pSession当前会话
@param buf 发送到数据
@param nBuf :数据的大小
/------------------------------------------------------------------------------*/
virtual void onSend( IServer* pSvr,ISessionPtr pSession,IBufferPtr buf,size_t nBuf){};
/*------------------------------------------------------------------------------
@remarks:数据库数据变化通知
@param buf 发送到数据
@param nBuf :数据的大小
/------------------------------------------------------------------------------*/
virtual void onDBNotify( IServer* pSvr,IBufferPtr buf,size_t nBuf){};
};
把自己的游戏服务器和大家共享,
支持高并发,5000+以上
内部采用iocp
内存管理采用引用计数