Files
wnmj/Servers/游戏组件/斗地主/服务器组件/TableFrameSink.h
2026-02-13 14:34:15 +08:00

201 lines
5.8 KiB
C++

#ifndef TABLE_FRAME_SINK_HEAD_FILE
#define TABLE_FRAME_SINK_HEAD_FILE
#pragma once
#include "Stdafx.h"
#include "AfxTempl.h"
#include "GameLogic.h"
#include "HistoryScore.h"
#include "DlgCustomRule.h"
#include "ServerControl.h"
//////////////////////////////////////////////////////////////////////////////////
//游戏桌子
class CTableFrameSink : public ITableFrameSink, public ITableUserAction
{
//游戏变量
protected:
WORD m_wFirstUser; //首叫用户
WORD m_wBankerUser; //庄家用户
WORD m_wCurrentUser; //当前玩家
BYTE m_cbOutCardCount[GAME_PLAYER]; //出牌次数
BYTE m_cbWaitTime; //等待时间
WORD m_wTimerControl; //时间控制
bool m_bUserTrustee[GAME_PLAYER]; //托管标志
BYTE m_aryOverTime[GAME_PLAYER]; //超时托管;
//托管信息
bool m_bOffLineTrustee; //离线托管
//炸弹信息
protected:
BYTE m_cbBombCount; //炸弹个数
BYTE m_cbEachBombCount[GAME_PLAYER]; //炸弹个数
//叫分信息
protected:
BYTE m_cbCallScoreCount; //叫分次数
BYTE m_cbBankerScore; //庄家叫分
BYTE m_cbScoreInfo[GAME_PLAYER]; //叫分信息
//出牌信息
protected:
WORD m_wTurnWiner; //胜利玩家
BYTE m_cbTurnCardCount; //出牌数目
BYTE m_cbTurnCardData[MAX_COUNT]; //出牌数据
//扑克信息
protected:
BYTE m_cbBankerCard[3]; //游戏底牌
BYTE m_cbHandCardCount[GAME_PLAYER]; //扑克数目
BYTE m_cbHandCardData[GAME_PLAYER][MAX_COUNT]; //手上扑克
//服务控制
protected:
HINSTANCE m_hControlInst;
IServerControl* m_pServerControl;
//组件变量
protected:
CGameLogic m_GameLogic; //游戏逻辑
CHistoryScore m_HistoryScore; //历史成绩
//组件接口
protected:
ITableFrame * m_pITableFrame; //框架接口
tagCustomRule * m_pGameCustomRule; //自定规则
tagGameServiceOption * m_pGameServiceOption; //游戏配置
tagGameServiceAttrib * m_pGameServiceAttrib; //游戏属性
//函数定义
public:
//构造函数
CTableFrameSink();
//析构函数
virtual ~CTableFrameSink();
//基础接口
public:
//释放对象
virtual VOID Release() { delete this; }
//接口查询
virtual VOID * QueryInterface(REFGUID Guid, DWORD dwQueryVer);
//管理接口
public:
//复位桌子
virtual VOID RepositionSink();
//配置桌子
virtual bool Initialization(IUnknownEx * pIUnknownEx);
//查询接口
public:
//查询限额
virtual SCORE QueryConsumeQuota(IServerUserItem * pIServerUserItem);
//最少积分
virtual SCORE QueryLessEnterScore(WORD wChairID, IServerUserItem * pIServerUserItem);
//查询是否扣服务费
virtual bool QueryBuckleServiceCharge(WORD wChairID){return true;}
//游戏事件
public:
//游戏开始
virtual bool OnEventGameStart();
//游戏结束
virtual bool OnEventGameConclude(WORD wChairID, IServerUserItem * pIServerUserItem, BYTE cbReason);
//发送场景
virtual bool OnEventSendGameScene(WORD wChairID, IServerUserItem * pIServerUserItem, BYTE cbGameStatus, bool bSendSecret);
//事件接口
public:
//时间事件
virtual bool OnTimerMessage(DWORD wTimerID, WPARAM wBindParam);
//数据事件
virtual bool OnDataBaseMessage(WORD wRequestID, VOID * pData, WORD wDataSize);
//积分事件
virtual bool OnUserScroeNotify(WORD wChairID, IServerUserItem * pIServerUserItem, BYTE cbReason);
//网络接口
public:
//游戏消息
virtual bool OnGameMessage(WORD wSubCmdID, VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem);
//框架消息
virtual bool OnFrameMessage(WORD wSubCmdID, VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem);
//比赛接口
public:
//设置基数
virtual void SetGameBaseScore(LONG lBaseScore);
virtual void SetPrivateInfo(BYTE bGameTypeIdex, DWORD bGameRuleIdex){ ; }
//重置私人场结束信息
virtual void ResetPrivateEndInfo();
//获得私人场结束信息流
virtual void GetPrivateEndInfo(DataStream &kDataStream, bool bSend);
//判断私人场是否结束
virtual bool IsPrivateEnd();
//真实椅子数量
virtual WORD GetRealChairCount() { return GAME_PLAYER; }
//私人场辅助函数;
public:
//是否有相应规则;
bool IsHasGameRule(eDDZRuleEnum eType);
//用户事件
public:
//用户断线
virtual bool OnActionUserOffLine(WORD wChairID, IServerUserItem * pIServerUserItem);
//用户重入
virtual bool OnActionUserConnect(WORD wChairID, IServerUserItem * pIServerUserItem);
//用户坐下
virtual bool OnActionUserSitDown(WORD wChairID, IServerUserItem * pIServerUserItem, bool bLookonUser);
//用户起立
virtual bool OnActionUserStandUp(WORD wChairID, IServerUserItem * pIServerUserItem, bool bLookonUser);
//用户同意
virtual bool OnActionUserOnReady(WORD wChairID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize) { return true; }
//房卡数量判断
virtual bool OnActionUserFangKaCheck(WORD wChairID, IServerUserItem * pIServerUserItem, SCORE lUserInsure) { return true; }
//用户开始游戏
virtual bool OnActionUserOnStart(WORD wChairID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize) { return true; }
//用户开始游戏
virtual bool OnActionUserStartGame(WORD wChairID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize) { return true; }
//游戏事件
protected:
//用户托管;
bool OnUserTrustee(WORD wChairID, bool bTrustee);
//用户放弃
bool OnUserPassCard(WORD wChairID);
//用户叫分
bool OnUserCallScore(WORD wChairID, BYTE cbCallScore);
//用户出牌
bool OnUserOutCard(WORD wChairID, BYTE cbCardData[], BYTE cbCardCount);
//作弊用户
bool OnCheatCard(IServerUserItem * pIServerUserItem);
//发送作弊信息
void SendCheatCard();
//断线托管
bool IsOfflineTrustee();
//私人场结算信息
public:
CMD_S_Private_End_Info m_PrivateEndInfo;
// 录像事件
public:
// 游戏开始
void starGameRecord();
// 玩家操作提示;
void addGameRecordAction(WORD wSubCmdID, void* pSubMessage, int nMessageSize);
//录像
public:
tagGameRecord m_kGameRecord;
};
//////////////////////////////////////////////////////////////////////////////////
#endif