Files
wnmj/Servers/服务器组件/私人场服务/PrivateGame.h

244 lines
9.3 KiB
C
Raw Normal View History

2026-02-13 14:34:15 +08:00
#ifndef PRIVATE_HEAD_FILE
#define PRIVATE_HEAD_FILE
#pragma once
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
#include "CTableFramePrivate.h"
#include "PrivateServiceHead.h"
#include "PrivateTableInfo.h"
///////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
//ʱ<>Ӷ<EFBFBD><D3B6><EFBFBD>
#define IDI_DISMISS_WAITE_END (IDI_PRIVATE_MODULE_START+1) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɢ<EFBFBD><C9A2><EFBFBD><EFBFBD>
#define IDI_CREATE_UNION_ROOM (IDI_PRIVATE_MODULE_START+2) //<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
#define IDI_LOAD_UNION_ROOM (IDI_PRIVATE_MODULE_START+3) //<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>Ϣ
#define IDI_NOT_DISMISS_ROOM (IDI_PRIVATE_MODULE_START+4) //<2F><>ֹ<EFBFBD><D6B9>ɢ
#define IDI_AUTO_USER_RESET (IDI_PRIVATE_MODULE_START+5) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܾ<EFBFBD>
#ifdef _DEBUG
#define DISMISS_WAITE_TIME 60 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɢʱ<C9A2><CAB1>
#else
#define DISMISS_WAITE_TIME 60*5 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɢʱ<C9A2><CAB1>
#endif
#define AGAIN_WAITE_TIME 30 //<2F><><EFBFBD>¿<EFBFBD>ʼ<EFBFBD>ȴ<EFBFBD>ʱ<EFBFBD><CAB1>
#define CREATE_PRIVATE_FREE_TIME 30*60 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>䵫δ<E4B5AB><CEB4>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1>
#define CREATE_UNION_TIME 30 //<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>᷿<EFBFBD><E1B7BF>
#define UNION_OFFLINE_LEAVE_TIME 5*60 //<2F><><EFBFBD><EFBFBD>5<EFBFBD><35><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>뿪;
#define NOT_DISMISS_ROOM_TIME 2*60.f //<2F><>ֹ<EFBFBD><D6B9>ɢʵ<C9A2><CAB5>Ϊ2<CEAA><32><EFBFBD><EFBFBD>;
#define NOT_AUTO_USER_TIME 5 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>5<EFBFBD><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
struct DBR_GR_Create_Private;
//<2F><>ʱ<EFBFBD><CAB1>
class PriaveteGame
:public IGamePrivateItem
,public IPrivateEventSink
,public IServerUserItemSink
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected:
tagGameServiceOption * m_pGameServiceOption; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tagGameServiceAttrib * m_pGameServiceAttrib; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMD_GR_Private_Info m_kPrivateInfo;
WHAllocationID m_allocationID;
CMD_GR_UnionRoomList m_UnionRoomList;
//<2F>ں˽ӿ<CBBD>
protected:
PrivateTableInfo* m_pTableInfo; //
ITimerEngine * m_pITimerEngine; //ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
IDBCorrespondManager * m_pIDataBaseEngine; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ITCPNetworkEngineEvent * m_pITCPNetworkEngineEvent; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
protected:
IMainServiceFrame * m_pIGameServiceFrame; //<2F><><EFBFBD>ܽӿ<DCBD>
IServerUserManager * m_pIServerUserManager; //<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
IAndroidUserManager * m_pAndroidUserManager; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
IServerUserItemSink * m_pIServerUserItemSink; //<2F>û<EFBFBD><C3BB>ص<EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><ECBAAF>
PriaveteGame();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual ~PriaveteGame(void);
bool SendData(IServerUserItem * pIServerUserItem, WORD wMainCmdID, WORD wSubCmdID, VOID * pData, WORD wDataSize);
bool SendTableData(ITableFrame* pITableFrame, WORD wMainCmdID, WORD wSubCmdID, VOID * pData, WORD wDataSize);
void CreatePrivateCost(PrivateTableInfo* pTableInfo);
//bool joinPrivateRoom(IServerUserItem * pIServerUserItem, ITableFrame * pICurrTableFrame);
bool joinPrivateRoom(IServerUserItem * pIServerUserItem, PrivateTableInfo* pTableInfo, SCORE lUnionScore);
bool OnEventCreatePrivate(WORD wRequestID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize,std::string kChannel);
void sendPrivateRoomInfo(IServerUserItem * pIServerUserItem,PrivateTableInfo* pTableInfo);
PrivateTableInfo* getTableInfoByRoomID(DWORD dwRoomID);
PrivateTableInfo* getTableInfoByCreaterID(DWORD dwUserID);
PrivateTableInfo* getTableInfoByTableID(DWORD dwRoomID);
PrivateTableInfo* getTableInfoByTableFrame(ITableFrame* pTableFrame);
void DismissRoom(PrivateTableInfo* pTableInfo);
void ClearRoom(PrivateTableInfo* pTableInfo);
void SendGamePrivateEndInfo(PrivateTableInfo* pTableInfo); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD>Ϸ<EFBFBD>ڲ<EFBFBD>
void gameEnd(PrivateTableInfo* pTableInfo);
WORD GetNullChairID(ITableFrame * pTableFrame);
private:
void CreaterPlayerPrivateCost(PrivateTableInfo* pTableInfo); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
void EveryOnePrivateCost(PrivateTableInfo* pTableInfo, bool bDivideCost); //ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD>Ҫ֧<D2AA><D6A7>,bDivideCost=trueʱ<65><CAB1>ƽ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>֧<EFBFBD><D6A7>;
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
public:
//<2F>ͷŶ<CDB7><C5B6><EFBFBD>
virtual VOID Release(){ delete this; }
//<2F>ӿڲ<D3BF>ѯ
virtual VOID * QueryInterface(REFGUID Guid, DWORD dwQueryVer);
//<2F><><EFBFBD>ƽӿ<C6BD>
public:
//<2F><><EFBFBD><EFBFBD>֪ͨ
virtual void OnStartService();
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual bool BindTableFrame(ITableFrame * pTableFrame,WORD wTableID);
//<2F><>ʼ<EFBFBD><CABC><EFBFBD>ӿ<EFBFBD>
virtual bool InitPrivateInterface(tagPrivateManagerParameter & MatchManagerParameter);
//ϵͳ<CFB5>¼<EFBFBD>
public:
//ʱ<><CAB1><EFBFBD>¼<EFBFBD>
virtual bool OnEventTimer(DWORD dwTimerID, WPARAM dwBindParameter);
//<2F><><EFBFBD>ݿ<EFBFBD><DDBF>¼<EFBFBD>
virtual bool OnEventDataBase(WORD wRequestID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize);
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
public:
//˽<>˳<EFBFBD><CBB3><EFBFBD>Ϣ
virtual bool OnEventSocketPrivate(WORD wSubCmdID, VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID);
//<2F><><EFBFBD><EFBFBD>˽<EFBFBD>˳<EFBFBD>
bool OnTCPNetworkSubCreatePrivate(VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID);
//<2F><><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>˽<EFBFBD>˳<EFBFBD>
bool OnTCPNetworkSubAgainEnter(VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID);
//<2F><><EFBFBD><EFBFBD>˽<EFBFBD>˳<EFBFBD>
bool OnTCPNetworkSubJoinPrivate(VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID);
//<2F><>ɢ
bool OnTCPNetworkSubDismissPrivate(VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
bool OnTCPNetworkSubAutoRoomInfo(VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID);
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
bool OnTCPNetworkSubDelAutoRoomInfo(VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
bool OnTCPNetworkSubAutoUserStatus(VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׼<EFBFBD><D7BC>
bool OnTCPNetworkSubAutoUserReady(VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID);
//<2F>û<EFBFBD><C3BB>ӿ<EFBFBD>
public:
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
virtual bool OnEventUserItemScore(IServerUserItem * pIServerUserItem, BYTE cbReason);
//<2F>û<EFBFBD>״̬
virtual bool OnEventUserItemStatus(IServerUserItem * pIServerUserItem, WORD wOldTableID=INVALID_TABLE, WORD wOldChairID=INVALID_CHAIR);
//<2F>û<EFBFBD>Ȩ<EFBFBD><C8A8>
virtual bool OnEventUserItemRight(IServerUserItem *pIServerUserItem, DWORD dwAddRight, DWORD dwRemoveRight,bool bGameRight=true);
//˽<>˳<EFBFBD><CBB3>û<EFBFBD><C3BB>¼<EFBFBD>
virtual bool AddPrivateAction(ITableFrame* pTbableFrame,DWORD dwChairID, BYTE bActionIdex);
//ͳ<><CDB3>˽<EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD>Ҿ<EFBFBD><D2BE><EFBFBD>
virtual bool addPrivatePlayCout(ITableFrame* pTbableFrame, WORD wCout);
//<2F>Dz<EFBFBD><C7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual bool IsAutoUserCountRule(ITableFrame* pTbableFrame, bool bReal);
//<2F>¼<EFBFBD><C2BC>ӿ<EFBFBD>
public:
//<2F>û<EFBFBD><C3BB><EFBFBD>¼
virtual bool OnEventUserLogon(IServerUserItem * pIServerUserItem);
//<2F>û<EFBFBD><C3BB>dz<EFBFBD>
virtual bool OnEventUserLogout(IServerUserItem * pIServerUserItem);
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
virtual bool OnEventEnterPrivate(DWORD dwSocketID ,VOID* pData,DWORD dwUserIP, bool bIsMobile);
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
virtual bool OnEventUserJoinPrivate(IServerUserItem * pIServerUserItem, BYTE cbReason,DWORD dwSocketID);
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
virtual bool OnEventUserQuitPrivate(IServerUserItem * pIServerUserItem, BYTE cbReason, WORD *pBestRank=NULL, DWORD dwContextID=INVALID_WORD);
//<2F><><EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD>
public:
//<2F><>Ϸ<EFBFBD><CFB7>ʼ
virtual bool OnEventGameStart(ITableFrame *pITableFrame, WORD wChairCount);
//<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
virtual bool OnEventGameEnd(ITableFrame *pITableFrame,WORD wChairID, IServerUserItem * pIServerUserItem, BYTE cbReason);
//<2F>û<EFBFBD><C3BB><EFBFBD>ȥ<EFBFBD><C8A5>Ϸ
virtual bool OnEventClientReady(WORD wChairID,IServerUserItem * pIServerUserItem);
//ͬ<><CDAC>˽<EFBFBD>˳<EFBFBD><CBB3><EFBFBD>Ϣ
virtual bool OnEventPrivateRoomInfo(WORD wChairID, IServerUserItem * pIServerUserItem);
//<2F>û<EFBFBD><C3BB>¼<EFBFBD>
public:
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
virtual bool OnActionUserOffLine(WORD wChairID, IServerUserItem * pIServerUserItem);
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
virtual bool OnActionUserSitDown(WORD wTableID, WORD wChairID, IServerUserItem * pIServerUserItem, bool bLookonUser);
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
virtual bool OnActionUserStandUp(WORD wTableID, WORD wChairID, IServerUserItem * pIServerUserItem, bool bLookonUser);
//<2F>û<EFBFBD>ͬ<EFBFBD><CDAC>
virtual bool OnActionUserOnReady(WORD wTableID, WORD wChairID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize);
//<2F>жϷ<D0B6><CFB7><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>
virtual bool OnActionUserFangKaCheck(WORD wTableID, WORD wChairID, IServerUserItem * pIServerUserItem, SCORE lUserInsure);
//<2F><>ʾ<EFBFBD><CABE>ʼ<EFBFBD><CABC>ť
virtual bool OnActionUserOnStart(WORD wTableID, WORD wChairID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize);
//<2F>û<EFBFBD><C3BB><EFBFBD>ʼ<EFBFBD><CABC>Ϸ
virtual bool OnActionUserStartGame(WORD wTableID, WORD wChairID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize);
public:
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
virtual bool OnEventReqStandUP(IServerUserItem * pIServerUserItem);
//ͳ<>ƻ<EFBFBD><C6BB><EFBFBD>;
virtual bool WriteTableScore(ITableFrame* pITableFrame,tagScoreInfo ScoreInfoArray[], WORD wScoreCount,DataStream& kData);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>;
virtual void CalcUnionScore(PrivateTableInfo* pTableInfo);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected:
//<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
virtual void AutoCreateUnionRoom(CMD_GR_AutoCreatePrivate &CreatePrivate);
//<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>;
virtual bool OnEventCreateAuto(WORD wRequestID, VOID * pData, WORD wDataSize, std::string kChannel);
//<2F><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ɹ<EFBFBD>;
virtual bool OnEventAddAutoRoomSucc(IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
virtual bool SendAddAutoResult(IServerUserItem * pIServerUserItem, LPCTSTR pszString, LONG lErrorCode);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>Ƿ<EFBFBD><C7B7>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD>;
virtual PrivateTableInfo* GetPrivateTableInfoByDaikaiIndex(DWORD dwDaikaiIndex);
////<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
//virtual void SendAutoUserStatus(PrivateTableInfo* pTableInfo);
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>Կ<EFBFBD>ʼ<EFBFBD><CABC>Ϸ;
virtual bool EfficacyStartGame(PrivateTableInfo* pTableInfo, WORD wReadyChairID);
};
#endif