Files
wnmj-normal/Servers/服务器组件/游戏服务器/TableFrame.h
2026-03-03 13:56:44 +08:00

373 lines
11 KiB
C++

#ifndef TABLE_FRAME_HEAD_FILE
#define TABLE_FRAME_HEAD_FILE
#include "Stdafx.h"
//////////////////////////////////////////////////////////////////////////////////
//数组定义
typedef IServerUserItem * CTableUserItemArray[MAX_CHAIR]; //游戏数组
typedef CWHArray<IServerUserItem *> CLookonUserItemArray; //旁观数组
typedef CWHArray<tagGameScoreRecord *> CGameScoreRecordArray; //记录数组
typedef CWHArray<tagGameCardLibrary *> 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