|
- #ifndef TABLE_FRAME_HEAD_FILE
- #define TABLE_FRAME_HEAD_FILE
-
- #include "Stdafx.h"
- #include "DataBasePacket.h"
- #include <unordered_map>
- //////////////////////////////////////////////////////////////////////////////////
-
- //数组定义
- typedef IServerUserItem * CTableUserItemArray[MAX_CHAIR]; //游戏数组
- typedef CWHArray<IServerUserItem *> CLookonUserItemArray; //旁观数组
- typedef CWHArray<tagGameScoreRecord *> CGameScoreRecordArray; //记录数组
- interface IMatchTableFrameNotify;
- //////////////////////////////////////////////////////////////////////////////////
-
- //桌子框架
- class CTableFrame : public ITableFrame, public ICompilationSink
- {
- //游戏属性
- protected:
- DWORD m_wPrivateTablParentNodeID; //私有桌子父节点ID
- DWORD m_wPrivateTableOwnerID; //创建者ID
- std::wstring m_sPrivateTableID; //私有桌子号
- WORD m_wTableID; //桌子号码
- WORD m_wChairCount; //椅子数目
- BYTE m_cbStartMode; //开始模式
- WORD m_wUserCount; //用户数目
- BYTE m_wTableKind; //桌子类型
- DWORD m_dwClubID; //俱乐部ID
- BYTE m_cbAuto; //桌子自动创建属性
- //状态变量
- protected:
- bool m_bGameStarted; //游戏标志
- bool m_bDrawStarted; //游戏标志
- bool m_bTableStarted; //游戏标志
- bool m_bTableInitFinish; //初始标识
- WORD m_wStartCount; //开始游戏次数
- bool m_bJieSan; //上次解散是否成功
- //状态变量
- protected:
- bool m_bAllowLookon[MAX_CHAIR]; //旁观标志
- bool m_GameRead[MAX_CHAIR]; //游戏中准备
- bool m_GameShuffleRead[MAX_CHAIR]; //游戏中洗牌准备
- SCORE m_lFrozenedScore[MAX_CHAIR]; //服务费用
- JN_GR_RoomLockDate m_jgrUserLockData[6]; //房间已经冻结用户冻结的钱
-
- //游戏变量
- protected:
- LONG m_lCellScore; //单元积分
- BYTE m_cbGameStatus; //游戏状态
-
- //时间变量
- protected:
- DWORD m_dwDrawStartTime; //开始时间
- SYSTEMTIME m_SystemTimeStart; //开始时间
- WORD m_wDrawCount; //游戏局数
-
- void* m_ReplayRecordData; //回放数据
- WORD m_ReplayRecordDataSize; //回放数据长度
-
- //动态属性
- 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:
- std::unordered_map<DWORD,int> m_AgreeDeletePriTableUsers; //投票解散的用户
-
- //组件接口
- 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; //服务配置
- tagGameConfig mGameConfig; //游戏配置
- WORD wXianZhi; //开始游戏时钻石限制
- //游戏记录
- protected:
- CGameScoreRecordArray m_GameScoreRecordActive; //游戏记录
-
-
- static CGameScoreRecordArray m_GameScoreRecordBuffer; //游戏记录
-
- //比赛接口
- protected:
- ITableFrameHook * m_pITableFrameHook; //比赛接口
- ITableUserAction * m_pIMatchTableAction; //动作接口
-
- protected:
- UINT32 m_iLastDismissVoteTime; //上一次解散投票的时间
- bool m_bDismissVoteStarted; //解散投票开始标志
- WORD w_SendChairID; //投票发起人座位号
- //函数定义
- public:
- //构造函数
- CTableFrame();
- //析构函数
- virtual ~CTableFrame();
-
- //基础接口
- public:
- //释放对象
- virtual VOID Release() { delete this;}
- //接口查询
- virtual VOID * QueryInterface(REFGUID Guid, DWORD dwQueryVer);
-
- //属性接口
- public:
-
- //++交换座位
- virtual bool SwapChair();
- //私有桌子号码
- virtual std::wstring& GetPrivateTableID() { return m_sPrivateTableID; }
-
- //私有桌子号码
- virtual bool GetPrivateTableID(TCHAR *pTableID, DWORD dLen);
- //设置私有桌子号码
- void SetPrivateTableID(TCHAR *pTableID) { m_sPrivateTableID = pTableID; };
- //桌子号码
- virtual WORD GetTableID() { return m_wTableID; }
- //游戏人数
- virtual WORD GetChairCount() { return m_wChairCount; }
- //修改最大人数
- virtual VOID SetChairCount(WORD wNewChairCount) {
- m_wChairCount = wNewChairCount;
- }
- //设置桌子类型
- virtual VOID SetTableKind(BYTE Kind){m_wTableKind = Kind; }
- virtual BYTE GetTableKind(){ return m_wTableKind; }
-
- //设置俱乐部ID
- virtual VOID SetTableClub(DWORD clubID){ m_dwClubID = clubID; }
- virtual DWORD GetTableClub(){ return m_dwClubID; }
-
- //设置桌子自动属性
- virtual VOID SetTableAuto(BYTE Auto){ m_cbAuto = Auto; }
- virtual BYTE GetTableAuto(){ return m_cbAuto; }
-
- //空位置数目
- virtual WORD GetNullChairCount(){ return m_wChairCount - m_wUserCount; }
-
- //配置参数
- public:
- //自定配置
- virtual VOID * GetCustomRule() { return m_pGameServiceOption->cbCustomRule; };
- //服务属性
- virtual tagGameServiceAttrib * GetGameServiceAttrib() { return m_pGameServiceAttrib; }
- //服务配置
- virtual tagGameServiceOption * GetGameServiceOption() { return m_pGameServiceOption; }
- //设置游戏配置
- virtual bool SetGameConfig(tagGameConfig a, WORD b) { mGameConfig = a; wXianZhi = b; return true; }
- //获取游戏配置
- virtual tagGameConfig GetGameConfig() { return mGameConfig; }
-
-
- //配置接口
- 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 BYTE GetGameStatus() { return m_cbGameStatus; }
- //设置状态
- virtual VOID SetGameStatus(BYTE cbGameStatus) { m_cbGameStatus = cbGameStatus; }
-
- //信息接口
- 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 bool StartGame();
- //解散游戏
- virtual bool DismissGame();
- //一脚赖油此局总共需要多少元宝
- virtual USHORT GetNeedPay();
- //纸牌
- virtual USHORT GetNeedPayZhiPai();
- //血流此局总共需要多少元宝
- virtual USHORT GetNeedPayEx();
-
- //戳瞎子总共需要多少元宝
- virtual USHORT GetNeedPayCxz();
- //结束游戏
- virtual bool ConcludeGame(BYTE cbGameStatus, bool bSendState = false);
- //结束桌子
- virtual bool ConcludeTable();
-
- //房主在未开始游戏前,请求解散牌桌
- virtual bool SetTableFree();
- //删除私人桌子
- virtual bool DeletePrivateTableNow();
- //直接扣除房卡
- virtual bool NowReduceBeans(DWORD dwUserID, UINT32 dwConsumeCurrency);
- //从冻结中消耗元宝
- virtual bool ReduceBeans(DWORD dwUserID, UINT32 dwConsumeCurrency);
- //锁定元宝
- virtual bool LockBeans(DWORD dwUserID, UINT32 dwConsumeCurrency);
- //解锁元宝
- virtual bool UnLockBeans(DWORD dwUserID, UINT32 dwConsumeCurrency);
- //在桌子解散的情况下,按照约定处理房间创建者需要解锁的元宝
- virtual void UnAdminLockBeans();
- virtual WORD GetStartCount() { return m_wStartCount; }
-
- virtual IServerUserItem* GetPrivateTableCreator()
- {
- if (m_wPrivateTableOwnerID <= 0)
- return NULL;
- return m_pIMainServiceFrame->SearchUserItem(m_wPrivateTableOwnerID);
- }
- void SetPrivateTableParentNodeID(DWORD wPrivateTablParentNodeID) {
- m_wPrivateTablParentNodeID = wPrivateTablParentNodeID;
- }
- //设置冻结金额
- bool SetUserLockData(DWORD dwUserID, DWORD dwNum);
- //获取冻结金额
- DWORD GetUserLockData(DWORD dwUserID);
-
- void SetPrivateTableOwnerID(DWORD dwUserID){ m_wPrivateTableOwnerID = dwUserID; }
- DWORD GetPrivateTableOwnerID(){ return m_wPrivateTableOwnerID; }
-
- //删除私有桌子
- bool DeletePrivateTableReq(IServerUserItem * pIUserItem, CMD_GR_DELETE_PRIVATE_ROOM_REQ req);
- //删除私有桌子
- bool DeletePrivateTableResp(IServerUserItem * pIUserItem, BYTE bAgree, bool bSendMe = false);
- bool DeletePrivateResult(USHORT uState, LPCTSTR szDescription);
- bool DeletePrivateStarted(USHORT uState, LPCTSTR szDescription);
- virtual bool SaveReplayRecord(void* pData, WORD wDataSize);//保存回放记录
- //用户接口
- public:
- //寻找用户
- virtual IServerUserItem * SearchUserItem(DWORD dwUserID);
- //游戏用户
- virtual IServerUserItem * GetTableUserItem(WORD wChairID);
- //旁观用户
- virtual IServerUserItem * EnumLookonUserItem(WORD wEnumIndex);
-
- //写分接口
- public:
- //写入积分
- virtual bool WriteUserScore(WORD wChairID, tagScoreInfo & ScoreInfo, DWORD dwGameMemal = INVALID_DWORD, DWORD dwPlayGameTime = INVALID_DWORD);
- //写入积分
- virtual bool WriteTableScore(tagScoreInfo ScoreInfoArray[], WORD wScoreCount);
- //写入俱乐部记录
- void WriteClubTableRecord();
- //推送闲聊机器人
- /*void WriteXianLiaoTableRecord();*/
- //计算接口
- 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:
- //用户创建私有房间
- bool OnTCPNetworkSubUserCreateRoom(IServerUserItem * pIServerUserItem);
- //起立动作
- virtual bool PerformStandUpAction(IServerUserItem * pIServerUserItem, bool bInitiative = false, bool bSendState = false);
- //游戏中途旁观进入
- virtual bool PerformLookonLogin(IServerUserItem * pIServerUserItem);
- //旁观动作
- virtual bool PerformLookonAction(IServerUserItem * pIServerUserItem);
- //坐下动作
- virtual bool PerformSitDownAction(WORD wChairID, IServerUserItem * pIServerUserItem, LPCTSTR lpszPassword = NULL);
- //发送在坐用户状态
- virtual bool SendUserInfoStat(IServerUserItem * pIServerUserItem);
- //比对客户端版本
- bool CheckClient(TCHAR *pNow, LPCTSTR pOld);
- //功能接口
- public:
- //发送场景
- virtual bool SendGameScene(IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize);
-
- //比赛接口
- public:
- //设置接口
- virtual bool SetTableFrameHook(IUnknownEx * pIUnknownEx);
- //获取接口
- virtual IUnknownEx * GetTableFrameHook(){ return m_pITableFrameHook; }
-
- //获取信息
- public:
- //获取信息
- virtual LPCTSTR GetCompilation(){ return szCompilation; }
-
- //功能函数
- public:
- //游戏局数
- WORD GetDrawCount();
- //获取出房主椅子外的座位
- WORD GetNullChairIDWithoutHost();
- //获取空位
- WORD GetNullChairID();
- //随机空位
- WORD GetRandNullChairID();
- //用户数目
- WORD GetSitUserCount();
- //旁观数目
- WORD GetLookonUserCount();
- //断线数目
- WORD GetOffLineUserCount();
-
- //功能函数
- public:
- //用户状况
- WORD GetTableUserInfo(tagTableUserInfo & TableUserInfo);
- //配置桌子
- bool InitializationFrame(WORD wTableID, tagTableFrameParameter & TableFrameParameter, WORD wGameType);
-
- //用户事件
- public:
- //上线事件
- bool OnEventUserOnLine(IServerUserItem * pIServerUserItem);
- //断线事件
- 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);
- //设置游戏配置
- void OnEventSetGameConfig(VOID * pData, WORD wDataSize, std::wstring sPrivateRoomId);
- //辅助函数
- public:
- //桌子状态
- bool SendTableStatus();
- //请求失败
- bool SendRequestFailure(IServerUserItem * pIServerUserItem, LPCTSTR pszDescribe, LONG lErrorCode);
-
- //效验函数
- public:
- //开始效验
- bool EfficacyStartGame(WORD wReadyChairID);
- //地址效验
- bool EfficacyIPAddress(IServerUserItem * pIServerUserItem);
- //积分效验
- bool EfficacyScoreRule(IServerUserItem * pIServerUserItem);
- //积分效验
- bool EfficacyEnterTableScoreRule(WORD wChairID, IServerUserItem * pIServerUserItem);
-
- public:
- //检查分配
- bool CheckDistribute();
- //游戏记录
- void RecordGameScore(bool bDrawStarted, DWORD dwStartGameTime = INVALID_DWORD, bool bUpdateParent=false);
-
- //温岭扣钻 调用数据库接口
- bool DeductWLZuanshi(DWORD dwUserID);
- };
-
- //////////////////////////////////////////////////////////////////////////////////
-
- #endif
|