#ifndef TABLE_FRAME_HEAD_FILE #define TABLE_FRAME_HEAD_FILE #include "Stdafx.h" ////////////////////////////////////////////////////////////////////////////////// //数组定义 typedef IServerUserItem * CTableUserItemArray[MAX_CHAIR]; //游戏数组 typedef CWHArray CLookonUserItemArray; //旁观数组 typedef CWHArray CGameScoreRecordArray; //记录数组 typedef CWHArray CGameCardLibraryArray; //牌库数组 interface IMatchTableFrameNotify; ////////////////////////////////////////////////////////////////////////////////// //桌子框架 class CTableFrame : public ITableFrame { //游戏属性 protected: WORD m_wTableID; //桌子号码 WORD m_wChairCount; //椅子数目 BYTE m_cbStartMode; //开始模式 WORD m_wUserCount; //用户数目 //状态变量 protected: bool m_bGameStarted; //游戏标志 bool m_bDrawStarted; //游戏标志 bool m_bTableStarted; //游戏标志 //状态变量 protected: bool m_bAllowLookon[MAX_CHAIR]; //旁观标志 SCORE m_lFrozenedScore[MAX_CHAIR]; //服务费用 //游戏变量 protected: LONG m_lCellScore; //单元积分 BYTE m_cbGameStatus; //游戏状态 //时间变量 protected: DWORD m_dwDrawStartTime; //开始时间 SYSTEMTIME m_SystemTimeStart; //开始时间 WORD m_wDrawCount; //游戏局数 //动态属性 protected: DWORD m_dwTableOwnerID; //桌主用户 TCHAR m_szEnterPassword[LEN_PASSWORD]; //进入密码 //断线变量 protected: WORD m_wOffLineCount[MAX_CHAIR]; //断线次数 DWORD m_dwOffLineTime[MAX_CHAIR]; //断线时间 //用户数组 protected: CTableUserItemArray m_TableUserItemArray; //游戏用户 CLookonUserItemArray m_LookonUserItemArray; //旁观用户 //组件接口 protected: ITimerEngine * m_pITimerEngine; //时间引擎 ITableFrameSink * m_pITableFrameSink; //桌子接口 IMainServiceFrame * m_pIMainServiceFrame; //服务接口 IAndroidUserManager * m_pIAndroidUserManager; //机器接口 //扩展接口 protected: ITableUserAction * m_pITableUserAction; //动作接口 ITableUserRequest * m_pITableUserRequest; //请求接口 //数据接口 protected: IDataBaseEngine * m_pIKernelDataBaseEngine; //内核数据 IDataBaseEngine * m_pIRecordDataBaseEngine; //记录数据 //配置信息 protected: tagGameParameter * m_pGameParameter; //配置参数 tagGameServiceAttrib * m_pGameServiceAttrib; //服务属性 tagGameServiceOption * m_pGameServiceOption; //服务配置 tagGameMatchOption * m_pGameMatchOption; //比赛配置 //游戏记录 protected: CGameScoreRecordArray m_GameScoreRecordActive; //游戏记录 static CGameScoreRecordArray m_GameScoreRecordBuffer; //游戏记录 DataStream m_UserDefine; //用户自定义数据 public: static CGameCardLibraryArray m_GameCardLibraryBuffer; //比赛接口 protected: ITableFrameHook * m_pITableFrameHook; //比赛接口 ITableUserAction * m_pIMatchTableAction; //动作接口 //私人场接口 protected: ITableFramePrivate * m_pITableFramePrivate; //私人场接口 ITableUserAction * m_pIPrivateTableAction; //私人场动作接口 //私人场数据 protected: tagPrivateFrameParameter m_PrivateFramePrarameter; // 私人场配置 tagPrivateFrameRecordInfo m_PrivateFrameRecord; // 游戏结束信息 //函数定义 public: //构造函数 CTableFrame(); //析构函数 virtual ~CTableFrame(); //基础接口 public: //释放对象 virtual VOID Release() { delete this; } //接口查询 virtual VOID * QueryInterface(REFGUID Guid, DWORD dwQueryVer); //属性接口 public: //桌子号码 virtual WORD GetTableID() { return m_wTableID; } //游戏人数 virtual WORD GetChairCount() { return m_wChairCount; } //空位置数目 virtual WORD GetNullChairCount(){return m_wChairCount - m_wUserCount;} //断线数目 virtual WORD GetOffLineUserCount(); //用户数目 virtual WORD GetSitUserCount(); //配置参数 public: //自定配置 virtual VOID * GetCustomRule() { return m_pGameServiceOption->cbCustomRule; }; //服务属性 virtual tagGameServiceAttrib * GetGameServiceAttrib() { return m_pGameServiceAttrib; } //服务配置 virtual tagGameServiceOption * GetGameServiceOption() { return m_pGameServiceOption; } //比赛配置; virtual tagGameMatchOption * GetGameMatchOption() { return m_pGameMatchOption; } //配置接口 public: //开始模式 virtual BYTE GetStartMode() { return m_cbStartMode; } //开始模式 virtual VOID SetStartMode(BYTE cbStartMode) { m_cbStartMode=cbStartMode; } //单元积分 public: //单元积分 virtual LONG GetCellScore() { return m_lCellScore; } //单元积分 virtual VOID SetCellScore(LONG lCellScore); //信息接口 public: //游戏状态 virtual bool IsGameStarted() { return m_bGameStarted; } //游戏状态 virtual bool IsDrawStarted() { return m_bDrawStarted; } //游戏状态 virtual bool IsTableStarted() { return m_bTableStarted; } //锁定状态 virtual bool IsTableLocked() { return (m_szEnterPassword[0]!=0); } //状态接口 public: //获取状态 virtual BYTE GetGameStatus() { return m_cbGameStatus; } //设置状态 virtual VOID SetGameStatus(BYTE cbGameStatus) { m_cbGameStatus=cbGameStatus; } //控制接口 public: //开始游戏 virtual bool StartGame(); //解散游戏 virtual bool DismissGame(); //结束游戏 virtual bool ConcludeGame(BYTE cbGameStatus, BYTE cbReason = GER_NORMAL); //结束桌子 virtual bool ConcludeTable(); //用户接口 public: //寻找用户 virtual IServerUserItem * SearchUserItem(DWORD dwUserID); //游戏用户 virtual IServerUserItem * GetTableUserItem(WORD wChairID); //旁观用户 virtual IServerUserItem * EnumLookonUserItem(WORD wEnumIndex); //写分接口 public: //写入积分 virtual bool WriteUserScore(WORD wChairID, tagScoreInfo & ScoreInfo); //写入积分 virtual bool WriteTableScore(tagScoreInfo ScoreInfoArray[], WORD wScoreCount,DataStream kDataStream = DataStream()); //积分倍数 //virtual bool WriteScoreMultiple(WORD wChairID, BYTE cbScoreMultiple); //计算接口 public: //计算税收 virtual SCORE CalculateRevenue(WORD wChairID, SCORE lScore); //查询限额 virtual SCORE QueryConsumeQuota(IServerUserItem * pIServerUserItem); //时间接口 public: //设置时间 virtual bool SetGameTimer(DWORD dwTimerID, DWORD dwElapse, DWORD dwRepeat, WPARAM dwBindParameter); //删除时间 virtual bool KillGameTimer(DWORD dwTimerID); //游戏用户 public: //发送数据 virtual bool SendTableData(WORD wChairID, WORD wSubCmdID); //发送数据 virtual bool SendTableData(WORD wChairID, WORD wSubCmdID, VOID * pData, WORD wDataSize,WORD wMainCmdID=MDM_GF_GAME); //旁观用户 public: //发送数据 virtual bool SendLookonData(WORD wChairID, WORD wSubCmdID); //发送数据 virtual bool SendLookonData(WORD wChairID, WORD wSubCmdID, VOID * pData, WORD wDataSize); //所有用户 public: //发送数据 virtual bool SendUserItemData(IServerUserItem * pIServerUserItem, WORD wSubCmdID); //发送数据 virtual bool SendUserItemData(IServerUserItem * pIServerUserItem, WORD wSubCmdID, VOID * pData, WORD wDataSize); //系统消息 public: //发送消息 virtual bool SendGameMessage(LPCTSTR lpszMessage, WORD wType); //游戏消息 virtual bool SendGameMessage(IServerUserItem * pIServerUserItem, LPCTSTR lpszMessage, WORD wType); //房间消息 virtual bool SendRoomMessage(IServerUserItem * pIServerUserItem, LPCTSTR lpszMessage, WORD wType); //动作处理 public: //起立动作 virtual bool PerformStandUpAction(IServerUserItem * pIServerUserItem); //起立动作 virtual bool PerformStandUpActionEx(IServerUserItem * pIServerUserItem); //旁观动作 virtual bool PerformLookonAction(WORD wChairID, IServerUserItem * pIServerUserItem); //坐下动作 virtual bool PerformSitDownAction(WORD wChairID, IServerUserItem * pIServerUserItem, LPCTSTR lpszPassword=NULL); //功能接口 public: //发送场景 virtual bool SendGameScene(IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize); //比赛接口 public: //设置接口 virtual bool SetTableFrameHook(IUnknownEx * pIUnknownEx); //获取接口 virtual IUnknownEx * GetTableFrameHook(){ return m_pITableFrameHook;} //伪造配置 virtual bool ImitateGameOption(IServerUserItem * pIServerUserItem); //私人场接口 public: //设置接口 virtual bool SetTableFramePrivate(IUnknownEx * pIUnknownEx); //获取接口 virtual IUnknownEx * GetTableFramePrivate(){ return m_pITableFramePrivate;} //添加事件 virtual void AddPrivateAction(DWORD dwChairID,BYTE bActionIdex); //设置私人场信息 virtual void SetPrivateInfo(tagPrivateFrameParameter &PriavateFrame); //获取私人场配置 virtual tagPrivateFrameParameter* GetPrivateFrameInfo(); //是不是自由人数场 virtual bool IsAutoUserCountRule(ITableFrame* pTbableFrame, bool bReal = false); //获取当前完成数据 virtual tagPrivateFrameRecordInfo* GetPrivateFrameRecord(); //统计私人场玩家局数 virtual VOID addPrivatePlayCout(WORD wCout); //重置私人场结束信息 virtual void ResetPrivateEndInfo(); //获得私人场结束信息流 virtual void GetPrivateEndInfo(DataStream &kDataStream, bool bSend); //判断私人场是否结束 virtual bool IsPrivateEnd(); //真实椅子数量 virtual WORD GetRealChairCount(); //牌库接口 public: //获取牌库 virtual tagGameCardLibrary* GetGameCardLibrary(DWORD dwCustomID = 0xFFFFFFFF); //增加牌库 static void AddGameCardLibrary(tagGameCardLibrary* pGameCard); //修改牌库 static void UpdateGameCardLibrary(DWORD dwLibID, DWORD dwCustomID, BYTE cbCardCount, BYTE* pCardData); //删除牌库 static void ClearGameCardLibrary(); //功能函数 public: //游戏局数 WORD GetDrawCount(); //获取空位 WORD GetNullChairID(); //随机空位 WORD GetRandNullChairID(); //旁观数目 WORD GetLookonUserCount(); //功能函数 public: //用户状况 WORD GetTableUserInfo(tagTableUserInfo & TableUserInfo); //配置桌子 bool InitializationFrame(WORD wTableID, tagTableFrameParameter & TableFrameParameter); //用户事件 public: //断线事件 bool OnEventUserOffLine(IServerUserItem * pIServerUserItem); //积分事件 bool OnUserScroeNotify(WORD wChairID, IServerUserItem * pIServerUserItem, BYTE cbReason); //系统事件 public: //时间事件 bool OnEventTimer(DWORD dwTimerID, WPARAM dwBindParameter); //游戏事件 bool OnEventSocketGame(WORD wSubCmdID, VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem); //框架事件 bool OnEventSocketFrame(WORD wSubCmdID, VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem); //辅助函数 public: //桌子状态 bool SendTableStatus(); //请求失败 bool SendRequestFailure(IServerUserItem * pIServerUserItem, LPCTSTR pszDescribe, LONG lErrorCode); //效验函数 public: //开始效验 bool EfficacyStartGame(WORD wReadyChairID); //开始准备校验 bool EfficacyStartReady(WORD wStartChairID); //地址效验 bool EfficacyIPAddress(IServerUserItem * pIServerUserItem); //积分效验 bool EfficacyScoreRule(IServerUserItem * pIServerUserItem); //检查分配 bool CheckDistribute(); }; ////////////////////////////////////////////////////////////////////////////////// #endif