#ifndef PRIVATE_HEAD_FILE #define PRIVATE_HEAD_FILE #pragma once //引入文件 #include "CTableFramePrivate.h" #include "PrivateServiceHead.h" #include "PrivateTableInfo.h" /////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////// //时钟定义 #define IDI_DISMISS_WAITE_END (IDI_PRIVATE_MODULE_START+1) //请求解散结束 #define IDI_CREATE_UNION_ROOM (IDI_PRIVATE_MODULE_START+2) //自动代开 #define IDI_LOAD_UNION_ROOM (IDI_PRIVATE_MODULE_START+3) //加载代开信息 #define IDI_NOT_DISMISS_ROOM (IDI_PRIVATE_MODULE_START+4) //禁止解散 #define IDI_AUTO_USER_RESET (IDI_PRIVATE_MODULE_START+5) //自由人数场拒绝 #ifdef _DEBUG #define DISMISS_WAITE_TIME 60 //请求解散时间 #else #define DISMISS_WAITE_TIME 60*5 //请求解散时间 #endif #define AGAIN_WAITE_TIME 30 //重新开始等待时间 #define CREATE_PRIVATE_FREE_TIME 30*60 //创建房间但未开始的时间 #define CREATE_UNION_TIME 30 //自动创建工会房间 #define UNION_OFFLINE_LEAVE_TIME 5*60 //掉线5分钟自动离开; #define NOT_DISMISS_ROOM_TIME 2*60.f //禁止解散实际为2分钟; #define NOT_AUTO_USER_TIME 5 //自由人数场5秒重置; struct DBR_GR_Create_Private; //定时赛 class PriaveteGame :public IGamePrivateItem ,public IPrivateEventSink ,public IServerUserItemSink { //比赛配置 protected: tagGameServiceOption * m_pGameServiceOption; //服务配置 tagGameServiceAttrib * m_pGameServiceAttrib; //服务属性 CMD_GR_Private_Info m_kPrivateInfo; WHAllocationID m_allocationID; CMD_GR_UnionRoomList m_UnionRoomList; //内核接口 protected: PrivateTableInfo* m_pTableInfo; // ITimerEngine * m_pITimerEngine; //时间引擎 IDBCorrespondManager * m_pIDataBaseEngine; //数据引擎 ITCPNetworkEngineEvent * m_pITCPNetworkEngineEvent; //网络引擎 //服务接口 protected: IMainServiceFrame * m_pIGameServiceFrame; //功能接口 IServerUserManager * m_pIServerUserManager; //用户管理 IAndroidUserManager * m_pAndroidUserManager; //机器管理 IServerUserItemSink * m_pIServerUserItemSink; //用户回调 //函数定义 public: //构造函数 PriaveteGame(); //析构函数 virtual ~PriaveteGame(void); bool SendData(IServerUserItem * pIServerUserItem, WORD wMainCmdID, WORD wSubCmdID, VOID * pData, WORD wDataSize); bool SendTableData(ITableFrame* pITableFrame, WORD wMainCmdID, WORD wSubCmdID, VOID * pData, WORD wDataSize); void CreatePrivateCost(PrivateTableInfo* pTableInfo); //bool joinPrivateRoom(IServerUserItem * pIServerUserItem, ITableFrame * pICurrTableFrame); bool joinPrivateRoom(IServerUserItem * pIServerUserItem, PrivateTableInfo* pTableInfo, SCORE lUnionScore); bool OnEventCreatePrivate(WORD wRequestID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize,std::string kChannel); void sendPrivateRoomInfo(IServerUserItem * pIServerUserItem,PrivateTableInfo* pTableInfo); PrivateTableInfo* getTableInfoByRoomID(DWORD dwRoomID); PrivateTableInfo* getTableInfoByCreaterID(DWORD dwUserID); PrivateTableInfo* getTableInfoByTableID(DWORD dwRoomID); PrivateTableInfo* getTableInfoByTableFrame(ITableFrame* pTableFrame); void DismissRoom(PrivateTableInfo* pTableInfo); void ClearRoom(PrivateTableInfo* pTableInfo); void SendGamePrivateEndInfo(PrivateTableInfo* pTableInfo); // 结算信息来自每个游戏内部 void gameEnd(PrivateTableInfo* pTableInfo); WORD GetNullChairID(ITableFrame * pTableFrame); private: void CreaterPlayerPrivateCost(PrivateTableInfo* pTableInfo); //创建者支付房卡; void EveryOnePrivateCost(PrivateTableInfo* pTableInfo, bool bDivideCost); //每个玩家都要支付,bDivideCost=true时,平分房卡支付; //基础接口 public: //释放对象 virtual VOID Release(){ delete this; } //接口查询 virtual VOID * QueryInterface(REFGUID Guid, DWORD dwQueryVer); //控制接口 public: //启动通知 virtual void OnStartService(); //管理接口 public: //绑定桌子 virtual bool BindTableFrame(ITableFrame * pTableFrame,WORD wTableID); //初始化接口 virtual bool InitPrivateInterface(tagPrivateManagerParameter & MatchManagerParameter); //系统事件 public: //时间事件 virtual bool OnEventTimer(DWORD dwTimerID, WPARAM dwBindParameter); //数据库事件 virtual bool OnEventDataBase(WORD wRequestID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize); //网络事件 public: //私人场消息 virtual bool OnEventSocketPrivate(WORD wSubCmdID, VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID); //创建私人场 bool OnTCPNetworkSubCreatePrivate(VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID); //重新加入私人场 bool OnTCPNetworkSubAgainEnter(VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID); //加入私人场 bool OnTCPNetworkSubJoinPrivate(VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID); //解散 bool OnTCPNetworkSubDismissPrivate(VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID); //创建代开信息 bool OnTCPNetworkSubAutoRoomInfo(VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID); //删除代开信息 bool OnTCPNetworkSubDelAutoRoomInfo(VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID); //自由人数玩家状态 bool OnTCPNetworkSubAutoUserStatus(VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID); //自由人数可以准备 bool OnTCPNetworkSubAutoUserReady(VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID); //用户接口 public: //用户积分 virtual bool OnEventUserItemScore(IServerUserItem * pIServerUserItem, BYTE cbReason); //用户状态 virtual bool OnEventUserItemStatus(IServerUserItem * pIServerUserItem, WORD wOldTableID=INVALID_TABLE, WORD wOldChairID=INVALID_CHAIR); //用户权限 virtual bool OnEventUserItemRight(IServerUserItem *pIServerUserItem, DWORD dwAddRight, DWORD dwRemoveRight,bool bGameRight=true); //私人场用户事件 virtual bool AddPrivateAction(ITableFrame* pTbableFrame,DWORD dwChairID, BYTE bActionIdex); //统计私人场玩家局数 virtual bool addPrivatePlayCout(ITableFrame* pTbableFrame, WORD wCout); //是不是自由人数场 virtual bool IsAutoUserCountRule(ITableFrame* pTbableFrame, bool bReal); //事件接口 public: //用户登录 virtual bool OnEventUserLogon(IServerUserItem * pIServerUserItem); //用户登出 virtual bool OnEventUserLogout(IServerUserItem * pIServerUserItem); //进入事件 virtual bool OnEventEnterPrivate(DWORD dwSocketID ,VOID* pData,DWORD dwUserIP, bool bIsMobile); //用户参赛 virtual bool OnEventUserJoinPrivate(IServerUserItem * pIServerUserItem, BYTE cbReason,DWORD dwSocketID); //用户退赛 virtual bool OnEventUserQuitPrivate(IServerUserItem * pIServerUserItem, BYTE cbReason, WORD *pBestRank=NULL, DWORD dwContextID=INVALID_WORD); //功能函数 public: //游戏开始 virtual bool OnEventGameStart(ITableFrame *pITableFrame, WORD wChairCount); //游戏结束 virtual bool OnEventGameEnd(ITableFrame *pITableFrame,WORD wChairID, IServerUserItem * pIServerUserItem, BYTE cbReason); //用户进去游戏 virtual bool OnEventClientReady(WORD wChairID,IServerUserItem * pIServerUserItem); //同步私人场信息 virtual bool OnEventPrivateRoomInfo(WORD wChairID, IServerUserItem * pIServerUserItem); //用户事件 public: //用户断线 virtual bool OnActionUserOffLine(WORD wChairID, IServerUserItem * pIServerUserItem); //用户坐下 virtual bool OnActionUserSitDown(WORD wTableID, WORD wChairID, IServerUserItem * pIServerUserItem, bool bLookonUser); //用户起来 virtual bool OnActionUserStandUp(WORD wTableID, WORD wChairID, IServerUserItem * pIServerUserItem, bool bLookonUser); //用户同意 virtual bool OnActionUserOnReady(WORD wTableID, WORD wChairID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize); //判断房卡是否够 virtual bool OnActionUserFangKaCheck(WORD wTableID, WORD wChairID, IServerUserItem * pIServerUserItem, SCORE lUserInsure); //显示开始按钮 virtual bool OnActionUserOnStart(WORD wTableID, WORD wChairID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize); //用户开始游戏 virtual bool OnActionUserStartGame(WORD wTableID, WORD wChairID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize); public: //用户起来 virtual bool OnEventReqStandUP(IServerUserItem * pIServerUserItem); //统计积分; virtual bool WriteTableScore(ITableFrame* pITableFrame,tagScoreInfo ScoreInfoArray[], WORD wScoreCount,DataStream& kData); //计算积分写入数据库; virtual void CalcUnionScore(PrivateTableInfo* pTableInfo); //辅助函数 protected: //自动创建房间; virtual void AutoCreateUnionRoom(CMD_GR_AutoCreatePrivate &CreatePrivate); //自动创建; virtual bool OnEventCreateAuto(WORD wRequestID, VOID * pData, WORD wDataSize, std::string kChannel); //增加自动开房信息成功; virtual bool OnEventAddAutoRoomSucc(IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize); //发送增加自动开房结果; virtual bool SendAddAutoResult(IServerUserItem * pIServerUserItem, LPCTSTR pszString, LONG lErrorCode); //代开信息是否已经开启; virtual PrivateTableInfo* GetPrivateTableInfoByDaikaiIndex(DWORD dwDaikaiIndex); ////发送自由人数玩家状态 //virtual void SendAutoUserStatus(PrivateTableInfo* pTableInfo); //是否可以开始游戏; virtual bool EfficacyStartGame(PrivateTableInfo* pTableInfo, WORD wReadyChairID); }; #endif