游戏服务器(基于iocp)

来源:互联网 发布:淘宝入驻条件及流程 编辑:程序博客网 时间:2024/05/13 04:01

  

  采用抽象类工厂的设计模式,将所有提供的类做了抽象:

 

如下:

 

#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

   内存管理采用引用计数