Files

181 lines
6.3 KiB
C
Raw Permalink Normal View History

2026-02-13 14:34:15 +08:00
#ifndef TableFrameSink_h__
#define TableFrameSink_h__
#pragma once
#include "Stdafx.h"
#include "GameLogic.h"
#include "ServerControl.h"
#include "DlgCustomRule.h"
//<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
class CTableFrameSink : public ITableFrameSink ,public ITableUserAction
{
enum tagServerTimerEnum
{
IDI_SEND_CARD = 1, //<2F><><EFBFBD>Ƽ<EFBFBD>ʱ<EFBFBD><CAB1>;
IDI_WAIT_OPERATE = 2, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>;
IDT_SEND_CARD = 3000, //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>;
IDT_WAIT_OPERATE = 45000, //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>;
};
protected:
WORD m_wFirstChairID; //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӻ<EFBFBD>;
WORD m_wBankerUser; //<2F><><EFBFBD><EFBFBD>ׯ<EFBFBD><D7AF>;
WORD m_wCurrentUser; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>;
WORD m_wFirstOperateUser; //ÿ<>ֿ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>;
LONG m_lCurChipScore; //<2F><>ǰ<EFBFBD><C7B0>ע;
DWORD m_dwOperateCode; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
BYTE m_cbCurPlayRound; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>;
BYTE m_cbGamingUserCount; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
BYTE m_cbUserResponse[GAME_PLAYER]; //<2F><><EFBFBD>һظ<D2BB>״̬;
BYTE m_cbHandCardData[GAME_PLAYER][MAX_COUNT]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
LONG m_lUserChipScore[GAME_PLAYER]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>Ŀ;
BYTE m_cbGamingStatus[GAME_PLAYER]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ״̬;
BYTE m_cbHideCardRound[GAME_PLAYER]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
LONG m_lCfgMinChipScore; //<2F><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ע;
LONG m_lCfgMaxChipScore; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע;
BYTE m_cbCfgMaxPlayRound; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
BYTE m_cbCfgMinCompareUser; //<2F><>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
BYTE m_cbCfgMinLookRound; //<2F><>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
BYTE m_cbCfgMinCompareRound; //<2F><>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
BYTE m_cbPlayTimes; //<2F><><EFBFBD><EFBFBD>;
BYTE m_cbMasterCtrlType; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
WORD m_wMasterChairID; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӻ<EFBFBD>;
protected:
CMD_S_Private_End_Info m_PrivateEndInfo; //˽<>г<EFBFBD><D0B3><EFBFBD>Ϣ;
protected:
ITableFrame *m_pITableFrame; //<2F><><EFBFBD>ܽӿ<DCBD>;
tagCustomRule *m_pGameCustomRule; //<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>;
const tagGameServiceOption *m_pGameServiceOption; //<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>;
CGameLogic m_GameLogic; //<2F><>Ϸ<EFBFBD>߼<EFBFBD>;
protected:
static const WORD m_wPlayerCount; //<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>;
public:
//<2F><><EFBFBD><EFBFBD><ECBAAF>;
CTableFrameSink();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
virtual ~CTableFrameSink();
public:
//<2F>ͷŶ<CDB7><C5B6><EFBFBD>;
virtual VOID Release() { if (IsValid()) delete this; }
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>Ч;
virtual bool IsValid() { return AfxIsValidAddress(this,sizeof(CTableFrameSink))?true:false; }
//<2F>ӿڲ<D3BF>ѯ;
virtual void * QueryInterface(const IID & Guid, DWORD dwQueryVer);
public:
//<2F><>ʼ<EFBFBD><CABC>;
virtual bool Initialization(IUnknownEx * pIUnknownEx);
//<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>;
virtual void RepositionSink();
public:
//<2F><>Ϸ״̬;
virtual bool IsUserPlaying(WORD wChairID);
public:
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>;
virtual bool OnActionUserOffLine(WORD wChairID,IServerUserItem * pIServerUserItem) { return true; }
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>;
virtual bool OnActionUserConnect(WORD wChairID,IServerUserItem * pIServerUserItem) { return true; }
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>;
virtual bool OnActionUserSitDown(WORD wChairID,IServerUserItem * pIServerUserItem, bool bLookonUser);
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>;
virtual bool OnActionUserStandUp(WORD wChairID,IServerUserItem * pIServerUserItem, bool bLookonUser);
//<2F>û<EFBFBD>ͬ<EFBFBD><CDAC>;
virtual bool OnActionUserOnReady(WORD wChairID,IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize) { return true; }
//<2F>û<EFBFBD><C3BB><EFBFBD>ʼ<EFBFBD><CABC>Ϸ
virtual bool OnActionUserOnStart(WORD wChairID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize) { return true; }
//<2F>û<EFBFBD><C3BB><EFBFBD>ʼ<EFBFBD><CABC>Ϸ
virtual bool OnActionUserStartGame(WORD wChairID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize) { return true; }
//<2F><>Ϸ<EFBFBD>¼<EFBFBD>;
public:
//<2F><>Ϸ<EFBFBD><CFB7>ʼ;
virtual bool OnEventGameStart();
//<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>;
virtual bool OnEventGameConclude(WORD wChairID, IServerUserItem * pIServerUserItem, BYTE cbReason);
//<2F><><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>;
virtual bool OnEventSendGameScene(WORD wChairID, IServerUserItem * pIServerUserItem, BYTE cbGameStatus, bool bSendSecret);
//<2F>¼<EFBFBD><C2BC>ӿ<EFBFBD>;
public:
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD>¼<EFBFBD>;
virtual bool OnTimerMessage(DWORD wTimerID, WPARAM wBindParam);
//<2F><>Ϸ<EFBFBD><CFB7>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>;
virtual bool OnGameMessage(WORD wSubCmdID, VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>;
virtual bool OnFrameMessage(WORD wSubCmdID, VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem);
//<2F><>ѯ<EFBFBD>ӿ<EFBFBD>;
public:
//<2F><>ѯ<EFBFBD>޶<EFBFBD>;
virtual SCORE QueryConsumeQuota(IServerUserItem * pIServerUserItem){ return 0; }
//<2F><><EFBFBD>ٻ<EFBFBD><D9BB><EFBFBD>;
virtual SCORE QueryLessEnterScore(WORD wChairID, IServerUserItem * pIServerUserItem){ return 0; }
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>;
virtual bool OnDataBaseMessage(WORD wRequestID, VOID * pData, WORD wDataSize){ return false; }
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>;
virtual bool OnUserScroeNotify(WORD wChairID, IServerUserItem * pIServerUserItem, BYTE cbReason){ return false; }
//<2F><>ѯ<EFBFBD>Ƿ<EFBFBD><C7B7>۷<EFBFBD><DBB7><EFBFBD><EFBFBD><EFBFBD>;
virtual bool QueryBuckleServiceCharge(WORD wChairID){ return true; }
private:
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
DWORD MakeOperateCode(WORD wChairID);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>;
WORD FindNextGamingUser(WORD wChairID);
//<2F>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true<75><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>false);
void SwitchNextGamingUser(WORD wChairID);
//ͳ<><CDB3>ʤ<EFBFBD><CAA4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
WORD CountLastWinUser();
//ͳ<><CDB3><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>;
WORD CountGameScore(WORD wWinner, LONG lGameScore[GAME_PLAYER]);
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
bool IsCardHidden(WORD wChairID)const { ASSERT(wChairID>=0 && wChairID<GAME_PLAYER); return ST_GAMING_HIDDEN==m_cbGamingStatus[wChairID]; }
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>;
bool IsGamingUser(WORD wChairID)const { ASSERT(wChairID>=0 && wChairID<GAME_PLAYER); return (ST_GAMING_HIDDEN==m_cbGamingStatus[wChairID] || ST_GAMING_LOOK==m_cbGamingStatus[wChairID]); }
protected:
//<2F><><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
bool OnSendCardOver(WORD wChairID);
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ;
bool OnUserOperate(WORD wChairID, DWORD dwOperateCode, LONG lOperateData);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>;
bool OnUserGiveUp(WORD wChairID);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>;
bool OnUserLookCard(WORD wChairID);
//<2F><>ע<EFBFBD><D7A2>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>;
bool OnUserChipScore(WORD wChairID, DWORD dwOperateCode, LONG lUserChip);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>;
bool OnUserCompareCard(WORD wChairID, DWORD dwOperateCode, WORD wCompareUser);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>;
public:
//<2F><><EFBFBD>û<EFBFBD><C3BB><EFBFBD>;
virtual void SetGameBaseScore(LONG lBaseScore){};
//<2F><><EFBFBD><EFBFBD>˽<EFBFBD>˳<EFBFBD><CBB3><EFBFBD>Ϣ;
virtual void SetPrivateInfo(BYTE cbGameTypeIndex, DWORD dwGameRule);
//<2F><><EFBFBD><EFBFBD>˽<EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ;
virtual void ResetPrivateEndInfo();
//<2F><><EFBFBD><EFBFBD>˽<EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>;
virtual void GetPrivateEndInfo(DataStream &kDataStream, bool bSend);
//<2F>ж<EFBFBD>˽<EFBFBD>˳<EFBFBD><CBB3>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>;
virtual bool IsPrivateEnd();
//<2F><>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual WORD GetRealChairCount() { return GAME_PLAYER; }
virtual bool OnActionUserFangKaCheck(WORD wChairID, IServerUserItem * pIServerUserItem, SCORE lUserInsure){ return true; }
};
#endif // TableFrameSink_h__