Files
2026-03-03 13:56:44 +08:00

244 lines
9.3 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#ifndef PRIVATE_HEAD_FILE
#define PRIVATE_HEAD_FILE
#pragma once
//引入文件
#include "CTableFramePrivate.h"
#include "PrivateServiceHead.h"
#include "PrivateTableInfo.h"
///////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
//时钟定义
#define IDI_DISMISS_WAITE_END (IDI_PRIVATE_MODULE_START+1) //请求解散结束
#define IDI_CREATE_UNION_ROOM (IDI_PRIVATE_MODULE_START+2) //自动代开
#define IDI_LOAD_UNION_ROOM (IDI_PRIVATE_MODULE_START+3) //加载代开信息
#define IDI_NOT_DISMISS_ROOM (IDI_PRIVATE_MODULE_START+4) //禁止解散
#define IDI_AUTO_USER_RESET (IDI_PRIVATE_MODULE_START+5) //自由人数场拒绝
#ifdef _DEBUG
#define DISMISS_WAITE_TIME 60 //请求解散时间
#else
#define DISMISS_WAITE_TIME 60*5 //请求解散时间
#endif
#define AGAIN_WAITE_TIME 30 //重新开始等待时间
#define CREATE_PRIVATE_FREE_TIME 30*60 //创建房间但未开始的时间
#define CREATE_UNION_TIME 30 //自动创建工会房间
#define UNION_OFFLINE_LEAVE_TIME 5*60 //掉线5分钟自动离开;
#define NOT_DISMISS_ROOM_TIME 2*60.f //禁止解散实际为2分钟;
#define NOT_AUTO_USER_TIME 5 //自由人数场5秒重置;
struct DBR_GR_Create_Private;
//定时赛
class PriaveteGame
:public IGamePrivateItem
,public IPrivateEventSink
,public IServerUserItemSink
{
//比赛配置
protected:
tagGameServiceOption * m_pGameServiceOption; //服务配置
tagGameServiceAttrib * m_pGameServiceAttrib; //服务属性
CMD_GR_Private_Info m_kPrivateInfo;
WHAllocationID m_allocationID;
CMD_GR_UnionRoomList m_UnionRoomList;
//内核接口
protected:
PrivateTableInfo* m_pTableInfo; //
ITimerEngine * m_pITimerEngine; //时间引擎
IDBCorrespondManager * m_pIDataBaseEngine; //数据引擎
ITCPNetworkEngineEvent * m_pITCPNetworkEngineEvent; //网络引擎
//服务接口
protected:
IMainServiceFrame * m_pIGameServiceFrame; //功能接口
IServerUserManager * m_pIServerUserManager; //用户管理
IAndroidUserManager * m_pAndroidUserManager; //机器管理
IServerUserItemSink * m_pIServerUserItemSink; //用户回调
//函数定义
public:
//构造函数
PriaveteGame();
//析构函数
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); // 结算信息来自每个游戏内部
void gameEnd(PrivateTableInfo* pTableInfo);
WORD GetNullChairID(ITableFrame * pTableFrame);
private:
void CreaterPlayerPrivateCost(PrivateTableInfo* pTableInfo); //创建者支付房卡;
void EveryOnePrivateCost(PrivateTableInfo* pTableInfo, bool bDivideCost); //每个玩家都要支付,bDivideCost=true时平分房卡支付;
//基础接口
public:
//释放对象
virtual VOID Release(){ delete this; }
//接口查询
virtual VOID * QueryInterface(REFGUID Guid, DWORD dwQueryVer);
//控制接口
public:
//启动通知
virtual void OnStartService();
//管理接口
public:
//绑定桌子
virtual bool BindTableFrame(ITableFrame * pTableFrame,WORD wTableID);
//初始化接口
virtual bool InitPrivateInterface(tagPrivateManagerParameter & MatchManagerParameter);
//系统事件
public:
//时间事件
virtual bool OnEventTimer(DWORD dwTimerID, WPARAM dwBindParameter);
//数据库事件
virtual bool OnEventDataBase(WORD wRequestID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize);
//网络事件
public:
//私人场消息
virtual bool OnEventSocketPrivate(WORD wSubCmdID, VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID);
//创建私人场
bool OnTCPNetworkSubCreatePrivate(VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID);
//重新加入私人场
bool OnTCPNetworkSubAgainEnter(VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID);
//加入私人场
bool OnTCPNetworkSubJoinPrivate(VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID);
//解散
bool OnTCPNetworkSubDismissPrivate(VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID);
//创建代开信息
bool OnTCPNetworkSubAutoRoomInfo(VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID);
//删除代开信息
bool OnTCPNetworkSubDelAutoRoomInfo(VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID);
//自由人数玩家状态
bool OnTCPNetworkSubAutoUserStatus(VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID);
//自由人数可以准备
bool OnTCPNetworkSubAutoUserReady(VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID);
//用户接口
public:
//用户积分
virtual bool OnEventUserItemScore(IServerUserItem * pIServerUserItem, BYTE cbReason);
//用户状态
virtual bool OnEventUserItemStatus(IServerUserItem * pIServerUserItem, WORD wOldTableID=INVALID_TABLE, WORD wOldChairID=INVALID_CHAIR);
//用户权限
virtual bool OnEventUserItemRight(IServerUserItem *pIServerUserItem, DWORD dwAddRight, DWORD dwRemoveRight,bool bGameRight=true);
//私人场用户事件
virtual bool AddPrivateAction(ITableFrame* pTbableFrame,DWORD dwChairID, BYTE bActionIdex);
//统计私人场玩家局数
virtual bool addPrivatePlayCout(ITableFrame* pTbableFrame, WORD wCout);
//是不是自由人数场
virtual bool IsAutoUserCountRule(ITableFrame* pTbableFrame, bool bReal);
//事件接口
public:
//用户登录
virtual bool OnEventUserLogon(IServerUserItem * pIServerUserItem);
//用户登出
virtual bool OnEventUserLogout(IServerUserItem * pIServerUserItem);
//进入事件
virtual bool OnEventEnterPrivate(DWORD dwSocketID ,VOID* pData,DWORD dwUserIP, bool bIsMobile);
//用户参赛
virtual bool OnEventUserJoinPrivate(IServerUserItem * pIServerUserItem, BYTE cbReason,DWORD dwSocketID);
//用户退赛
virtual bool OnEventUserQuitPrivate(IServerUserItem * pIServerUserItem, BYTE cbReason, WORD *pBestRank=NULL, DWORD dwContextID=INVALID_WORD);
//功能函数
public:
//游戏开始
virtual bool OnEventGameStart(ITableFrame *pITableFrame, WORD wChairCount);
//游戏结束
virtual bool OnEventGameEnd(ITableFrame *pITableFrame,WORD wChairID, IServerUserItem * pIServerUserItem, BYTE cbReason);
//用户进去游戏
virtual bool OnEventClientReady(WORD wChairID,IServerUserItem * pIServerUserItem);
//同步私人场信息
virtual bool OnEventPrivateRoomInfo(WORD wChairID, IServerUserItem * pIServerUserItem);
//用户事件
public:
//用户断线
virtual bool OnActionUserOffLine(WORD wChairID, IServerUserItem * pIServerUserItem);
//用户坐下
virtual bool OnActionUserSitDown(WORD wTableID, WORD wChairID, IServerUserItem * pIServerUserItem, bool bLookonUser);
//用户起来
virtual bool OnActionUserStandUp(WORD wTableID, WORD wChairID, IServerUserItem * pIServerUserItem, bool bLookonUser);
//用户同意
virtual bool OnActionUserOnReady(WORD wTableID, WORD wChairID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize);
//判断房卡是否够
virtual bool OnActionUserFangKaCheck(WORD wTableID, WORD wChairID, IServerUserItem * pIServerUserItem, SCORE lUserInsure);
//显示开始按钮
virtual bool OnActionUserOnStart(WORD wTableID, WORD wChairID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize);
//用户开始游戏
virtual bool OnActionUserStartGame(WORD wTableID, WORD wChairID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize);
public:
//用户起来
virtual bool OnEventReqStandUP(IServerUserItem * pIServerUserItem);
//统计积分;
virtual bool WriteTableScore(ITableFrame* pITableFrame,tagScoreInfo ScoreInfoArray[], WORD wScoreCount,DataStream& kData);
//计算积分写入数据库;
virtual void CalcUnionScore(PrivateTableInfo* pTableInfo);
//辅助函数
protected:
//自动创建房间;
virtual void AutoCreateUnionRoom(CMD_GR_AutoCreatePrivate &CreatePrivate);
//自动创建;
virtual bool OnEventCreateAuto(WORD wRequestID, VOID * pData, WORD wDataSize, std::string kChannel);
//增加自动开房信息成功;
virtual bool OnEventAddAutoRoomSucc(IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize);
//发送增加自动开房结果;
virtual bool SendAddAutoResult(IServerUserItem * pIServerUserItem, LPCTSTR pszString, LONG lErrorCode);
//代开信息是否已经开启;
virtual PrivateTableInfo* GetPrivateTableInfoByDaikaiIndex(DWORD dwDaikaiIndex);
////发送自由人数玩家状态
//virtual void SendAutoUserStatus(PrivateTableInfo* pTableInfo);
//是否可以开始游戏;
virtual bool EfficacyStartGame(PrivateTableInfo* pTableInfo, WORD wReadyChairID);
};
#endif