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

446 lines
16 KiB
C++

#ifndef ATTEMPER_ENGINE_SINK_HEAD_FILE
#define ATTEMPER_ENGINE_SINK_HEAD_FILE
#pragma once
#include "Stdafx.h"
#include "TableFrame.h"
#include "InitParameter.h"
#include "ServerListManager.h"
#include "DataBasePacket.h"
#include "SensitiveWordsFilter.h"
#include "DistributeManager.h"
//////////////////////////////////////////////////////////////////////////////////
//连接类型
#define CLIENT_KIND_FALSH 1 //网页类型
#define CLIENT_KIND_MOBILE 2 //手机类型
#define CLIENT_KIND_COMPUTER 3 //电脑类型
//绑定参数
struct tagBindParameter
{
//连接属性
DWORD dwSocketID; //网络标识
DWORD dwClientAddr; //连接地址
DWORD dwActiveTime; //激活时间
//版本信息
DWORD dwPlazaVersion; //广场版本
DWORD dwFrameVersion; //框架版本
DWORD dwProcessVersion; //进程版本
//用户属性
BYTE cbClientKind; //连接类型
IServerUserItem * pIServerUserItem; //用户接口
};
//系统消息
struct tagSystemMessage
{
DWORD dwLastTime; //发送时间
DBR_GR_SystemMessage SystemMessage; //系统消息
};
//数组说明
typedef CWHArray<CTableFrame *> CTableFrameArray; //桌子数组
typedef CMap<DWORD,DWORD,DWORD,DWORD &> CKickUserItemMap; //踢人映射
typedef CList<tagSystemMessage *> CSystemMessageList; //系统消息
//////////////////////////////////////////////////////////////////////////////////
//调度钩子
class CAttemperEngineSink : public IAttemperEngineSink, public IMainServiceFrame,
public IServerUserItemSink
{
//友元定义
friend class CServiceUnits;
//状态变量
protected:
bool m_bCollectUser; //汇总标志
bool m_bNeekCorrespond; //协调标志
//控制变量
protected:
DWORD m_dwIntervalTime; //间隔时间
DWORD m_dwLastDisposeTime; //处理时间
//绑定信息
protected:
tagBindParameter * m_pNormalParameter; //绑定信息
tagBindParameter * m_pAndroidParameter; //绑定信息
//配置信息
protected:
CInitParameter * m_pInitParameter; //配置参数
tagGameParameter * m_pGameParameter; //配置参数
tagGameMatchOption * m_pGameMatchOption; //比赛配置
tagGameServiceAttrib * m_pGameServiceAttrib; //服务属性
tagGameServiceOption * m_pGameServiceOption; //服务配置
//配置数据
protected:
CMD_GR_ConfigColumn m_DataConfigColumn; //列表配置
CMD_GR_ConfigProperty m_DataConfigProperty; //道具配置
//组件变量
protected:
CTableFrameArray m_TableFrameArray; //桌子数组
CServerListManager m_ServerListManager; //列表管理
CServerUserManager m_ServerUserManager; //用户管理
CAndroidUserManager m_AndroidUserManager; //机器管理
CGamePropertyManager m_GamePropertyManager; //道具管理
CDistributeManager m_DistributeManage; //分组管理
CKickUserItemMap m_KickUserItemMap; //踢人管理
CSystemMessageList m_SystemMessageList; //系统消息
CSensitiveWordsFilter m_WordsFilter; //脏字过滤
//组件接口
protected:
ITimerEngine * m_pITimerEngine; //时间引擎
IAttemperEngine * m_pIAttemperEngine; //调度引擎
ITCPSocketService * m_pITCPSocketService; //网络服务
ITCPNetworkEngine * m_pITCPNetworkEngine; //网络引擎
IGameServiceManager * m_pIGameServiceManager; //服务管理
IGameServiceCustomTime * m_pIGameServiceSustomTime; //时间配置
//比赛服务
public:
IMatchServiceManager* m_pIMatchServiceManager; //比赛管理接口
//比赛服务
public:
IPrivateServiceManager* m_pIPrivateServiceManager; //私人场管理接口
//数据引擎
public:
IDataBaseEngine * m_pIRecordDataBaseEngine; //数据引擎
IDataBaseEngine * m_pIKernelDataBaseEngine; //数据引擎
IDBCorrespondManager * m_pIDBCorrespondManager; //数据协调
//函数定义
public:
//构造函数
CAttemperEngineSink();
//析构函数
virtual ~CAttemperEngineSink();
//基础接口
public:
//释放对象
virtual VOID Release() { return; }
//接口查询
virtual VOID * QueryInterface(REFGUID Guid, DWORD dwQueryVer);
//异步接口
public:
//启动事件
virtual bool OnAttemperEngineStart(IUnknownEx * pIUnknownEx);
//停止事件
virtual bool OnAttemperEngineConclude(IUnknownEx * pIUnknownEx);
//事件接口
public:
//控制事件
virtual bool OnEventControl(WORD wIdentifier, VOID * pData, WORD wDataSize);
//自定事件
virtual bool OnEventAttemperData(WORD wRequestID, VOID * pData, WORD wDataSize);
//内核事件
public:
//时间事件
virtual bool OnEventTimer(DWORD dwTimerID, WPARAM wBindParam);
//数据库事件
virtual bool OnEventDataBase(WORD wRequestID, DWORD dwContextID, VOID * pData, WORD wDataSize);
//连接事件
public:
//连接事件
virtual bool OnEventTCPSocketLink(WORD wServiceID, INT nErrorCode);
//关闭事件
virtual bool OnEventTCPSocketShut(WORD wServiceID, BYTE cbShutReason);
//读取事件
virtual bool OnEventTCPSocketRead(WORD wServiceID, TCP_Command Command, VOID * pData, WORD wDataSize);
//网络事件
public:
//应答事件
virtual bool OnEventTCPNetworkBind(DWORD dwClientAddr, DWORD dwSocketID);
//关闭事件
virtual bool OnEventTCPNetworkShut(DWORD dwClientAddr, DWORD dwActiveTime, DWORD dwSocketID);
//读取事件
virtual bool OnEventTCPNetworkRead(TCP_Command Command, VOID * pData, WORD wDataSize, DWORD dwSocketID);
//消息接口
public:
//房间消息
virtual bool SendRoomMessage(LPCTSTR lpszMessage, WORD wType);
//游戏消息
virtual bool SendGameMessage(LPCTSTR lpszMessage, WORD wType);
//房间消息
virtual bool SendRoomMessage(IServerUserItem * pIServerUserItem, LPCTSTR lpszMessage, WORD wType);
//游戏消息
virtual bool SendGameMessage(IServerUserItem * pIServerUserItem, LPCTSTR lpszMessage, WORD wType);
//房间消息
virtual bool SendRoomMessage(DWORD dwSocketID, LPCTSTR lpszMessage, WORD wType, bool bAndroid);
//网络接口
public:
//发送数据
virtual bool SendData(BYTE cbSendMask, WORD wMainCmdID, WORD wSubCmdID, VOID * pData, WORD wDataSize);
//发送数据
virtual bool SendData(DWORD dwSocketID, WORD wMainCmdID, WORD wSubCmdID, VOID * pData, WORD wDataSize);
//发送数据
virtual bool SendData(IServerUserItem * pIServerUserItem, WORD wMainCmdID, WORD wSubCmdID, VOID * pData, WORD wDataSize);
//群发数据
virtual bool SendDataBatchToMobileUser(WORD wCmdTable, WORD wMainCmdID, WORD wSubCmdID, VOID * pData, WORD wDataSize);
//功能接口
public:
//插入用户
virtual bool InsertDistribute(IServerUserItem * pIServerUserItem);
//删除用户
virtual bool DeleteDistribute(IServerUserItem * pIServerUserItem);
//敏感词过滤
virtual void SensitiveWordFilter(LPCTSTR pMsg, LPTSTR pszFiltered, int nMaxLen);
//解锁机器人
virtual VOID UnLockAndroidUser(WORD wServerID, WORD wBatchID);
//用户接口
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);
//数据事件
protected:
//登录成功
bool OnDBLogonSuccess(DWORD dwContextID, VOID * pData, WORD wDataSize);
//登录失败
bool OnDBLogonFailure(DWORD dwContextID, VOID * pData, WORD wDataSize);
//配置信息
bool OnDBGameParameter(DWORD dwContextID, VOID * pData, WORD wDataSize);
//列表信息
bool OnDBGameColumnInfo(DWORD dwContextID, VOID * pData, WORD wDataSize);
//机器信息
bool OnDBGameAndroidInfo(DWORD dwContextID, VOID * pData, WORD wDataSize);
//机器参数
bool OnDBGameAndroidParameter(DWORD dwContextID, VOID * pData, WORD wDataSize);
//道具信息
bool OnDBGamePropertyInfo(DWORD dwContextID, VOID * pData, WORD wDataSize);
//加载牌库
bool OnDBGameCardLibrary(DWORD dwContextID, VOID * pData, WORD wDataSize);
//牌库配置;
bool OnDBGameCardLibraryCfg(DWORD dwContextID, VOID * pData, WORD wDataSize);
//银行信息
bool OnDBUserInsureInfo(DWORD dwContextID, VOID * pData, WORD wDataSize);
//银行成功
bool OnDBUserInsureSuccess(DWORD dwContextID, VOID * pData, WORD wDataSize);
//银行失败
bool OnDBUserInsureFailure(DWORD dwContextID, VOID * pData, WORD wDataSize);
//用户信息
bool OnDBUserInsureUserInfo(DWORD dwContextID, VOID * pData, WORD wDataSize);
//道具成功
bool OnDBPropertySuccess(DWORD dwContextID, VOID * pData, WORD wDataSize);
//道具失败
bool OnDBPropertyFailure(DWORD dwContextID, VOID * pData, WORD wDataSize);
//系统消息
bool OnDBSystemMessage(DWORD dwContextID, VOID * pData, WORD wDataSize);
//加载敏感词
bool OnDBSensitiveWords(DWORD dwContextID, VOID * pData, WORD wDataSize);
//连接处理
protected:
//注册事件
bool OnTCPSocketMainRegister(WORD wSubCmdID, VOID * pData, WORD wDataSize);
//列表事件
bool OnTCPSocketMainServiceInfo(WORD wSubCmdID, VOID * pData, WORD wDataSize);
//汇总事件
bool OnTCPSocketMainUserCollect(WORD wSubCmdID, VOID * pData, WORD wDataSize);
//管理服务
bool OnTCPSocketMainManagerService(WORD wSubCmdID, VOID * pData, WORD wDataSize);
//网站网关
bool OnTCPSocketMainWebService(WORD wSubCmdID, VOID * pData, WORD wDataSize);
//网络事件
protected:
//用户处理
bool OnTCPNetworkMainUser(WORD wSubCmdID, VOID * pData, WORD wDataSize, DWORD dwSocketID);
//登录处理
bool OnTCPNetworkMainLogon(WORD wSubCmdID, VOID * pData, WORD wDataSize, DWORD dwSocketID);
//游戏处理
bool OnTCPNetworkMainGame(WORD wSubCmdID, VOID * pData, WORD wDataSize, DWORD dwSocketID);
//框架处理
bool OnTCPNetworkMainFrame(WORD wSubCmdID, VOID * pData, WORD wDataSize, DWORD dwSocketID);
//银行处理
bool OnTCPNetworkMainInsure(WORD wSubCmdID, VOID * pData, WORD wDataSize, DWORD dwSocketID);
//管理处理
bool OnTCPNetworkMainManage(WORD wSubCmdID, VOID * pData, WORD wDataSize, DWORD dwSocketID);
//比赛命令
bool OnTCPNetworkMainMatch(WORD wSubCmdID, VOID * pData, WORD wDataSize, DWORD dwSocketID);
//私人场命令
bool OnTCPNetworkMainPrivate(WORD wSubCmdID, VOID * pData, WORD wDataSize, DWORD dwSocketID);
//网络事件
protected:
//I D 登录
bool OnTCPNetworkSubLogonUserID(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//手机登录
bool OnTCPNetworkSubLogonMobile(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//帐号登录
bool OnTCPNetworkSubLogonAccounts(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//用户命令
protected:
//用户规则
bool OnTCPNetworkSubUserRule(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//用户旁观
bool OnTCPNetworkSubUserLookon(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//用户坐下
bool OnTCPNetworkSubUserSitDown(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//用户起立
bool OnTCPNetworkSubUserStandUp(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//用户聊天
bool OnTCPNetworkSubUserChat(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//用户私聊
bool OnTCPNetworkSubWisperChat(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//用户表情
bool OnTCPNetworkSubUserExpression(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//用户表情
bool OnTCPNetworkSubWisperExpression(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//购买道具
bool OnTCPNetworkSubPropertyBuy(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//使用道具
bool OnTCPNetwordSubSendTrumpet(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//邀请用户
bool OnTCPNetworkSubUserInviteReq(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//拒绝厌友
bool OnTCPNetworkSubUserRepulseSit(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//踢出命令
bool OnTCPNetworkSubMemberKickUser(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//请求用户信息
bool OnTCPNetworkSubUserInfoReq(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//请求更换位置
bool OnTCPNetworkSubUserChairReq(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//请求椅子用户信息
bool OnTCPNetworkSubChairUserInfoReq(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//银行命令
protected:
//查询银行
bool OnTCPNetworkSubQueryInsureInfo(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//存款请求
bool OnTCPNetworkSubSaveScoreRequest(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//取款请求
bool OnTCPNetworkSubTakeScoreRequest(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//转账请求
bool OnTCPNetworkSubTransferScoreRequest(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//查询用户请求
bool OnTCPNetworkSubQueryUserInfoRequest(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//管理命令
protected:
//查询设置
bool OnTCPNetworkSubQueryOption(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//房间设置
bool OnTCPNetworkSubOptionServer(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//踢出用户
bool OnTCPNetworkSubManagerKickUser(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//限制聊天
bool OnTCPNetworkSubLimitUserChat(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//踢出所有用户
bool OnTCPNetworkSubKickAllUser(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//发布消息
bool OnTCPNetworkSubSendMessage(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//解散游戏
bool OnTCPNetworkSubDismissGame(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//内部事件
protected:
//用户登录
VOID OnEventUserLogon(IServerUserItem * pIServerUserItem, bool bAlreadyOnLine);
//用户登出
VOID OnEventUserLogout(IServerUserItem * pIServerUserItem, DWORD dwLeaveReason);
//执行功能
protected:
//分配用户
bool PerformDistribute();
//解锁游戏币
bool PerformUnlockScore(DWORD dwUserID, DWORD dwInoutIndex, DWORD dwLeaveReason);
//版本检查
bool PerformCheckVersion(DWORD dwPlazaVersion, DWORD dwFrameVersion, DWORD dwClientVersion, DWORD dwSocketID);
//切换连接
bool SwitchUserItemConnect(IServerUserItem * pIServerUserItem, TCHAR szMachineID[LEN_MACHINE_ID], WORD wTargetIndex,BYTE cbDeviceType=DEVICE_TYPE_PC,WORD wBehaviorFlags=0,WORD wPageTableCount=0);
//发送函数
protected:
//用户信息
virtual bool SendUserInfoPacket(IServerUserItem * pIServerUserItem, DWORD dwSocketID);
virtual bool SendUserInfoPacket(IServerUserItem * pIServerUserItem, IServerUserItem * pISendToUserItem);
//辅助函数
protected:
//购前事件
bool OnEventPropertyBuyPrep(WORD cbRequestArea,WORD wPropertyIndex,IServerUserItem *pISourceUserItem,IServerUserItem *pTargetUserItem);
//道具消息
bool SendPropertyMessage(DWORD dwSourceID,DWORD dwTargerID,WORD wPropertyIndex,WORD wPropertyCount);
//道具效应
bool SendPropertyEffect(IServerUserItem * pIServerUserItem);
//辅助函数
protected:
//登录失败
bool SendLogonFailure(LPCTSTR pszString, LONG lErrorCode, DWORD dwSocketID);
//银行失败
bool SendInsureFailure(IServerUserItem * pIServerUserItem, LPCTSTR pszDescribe, LONG lErrorCode,BYTE cbActivityGame);
//请求失败
bool SendRequestFailure(IServerUserItem * pIServerUserItem, LPCTSTR pszDescribe, LONG lErrorCode);
//道具失败
bool SendPropertyFailure(IServerUserItem * pIServerUserItem, LPCTSTR pszDescribe, LONG lErrorCode,WORD wRequestArea);
//辅助函数
public:
//绑定用户
IServerUserItem * GetBindUserItem(WORD wBindIndex);
//绑定参数
tagBindParameter * GetBindParameter(WORD wBindIndex);
//道具类型
WORD GetPropertyType(WORD wPropertyIndex);
//辅助函数
protected:
//配置机器
bool InitAndroidUser();
//配置桌子
bool InitTableFrameArray();
//配置比赛
bool InitMatchServiceManager();
//配置私人房
bool InitPrivateServiceManager();
//发送请求
bool SendUIControlPacket(WORD wRequestID, VOID * pData, WORD wDataSize);
//设置参数
void SetMobileUserParameter(IServerUserItem * pIServerUserItem,BYTE cbDeviceType,WORD wBehaviorFlags,WORD wPageTableCount);
//群发用户信息
bool SendUserInfoPacketBatchToMobileUser(IServerUserItem * pIServerUserItem);
//发可视用户信息
bool SendViewTableUserInfoPacketToMobileUser(IServerUserItem * pIServerUserItem,DWORD dwUserIDReq);
//手机立即登录
bool MobileUserImmediately(IServerUserItem * pIServerUserItem);
//购买道具
int OnPropertyBuy(VOID * pData, WORD wDataSize, DWORD dwSocketID);
//发送系统消息
bool SendSystemMessage(CMD_GR_SendMessage * pSendMessage, WORD wDataSize);
//清除消息数据
void ClearSystemMessageData();
};
//////////////////////////////////////////////////////////////////////////////////
#endif