|
- #include "StdAfx.h"
- #include "AfxTempl.h"
- #include "LockTimeMatch.h"
- #include "ImmediateMatch.h"
- #include "MatchServiceManager.h"
-
- //////////////////////////////////////////////////////////////////////////
-
- //构造函数
- CMatchServiceManager::CMatchServiceManager(void)
- {
- //状态变量
- m_bIsService = false;
-
- //设置变量
- m_pIGameMatchItem = NULL;
-
- return;
- }
-
- //析构函数
- CMatchServiceManager::~CMatchServiceManager(void)
- {
- //释放指针
- if (m_pIGameMatchItem != NULL) SafeDelete(m_pIGameMatchItem);
- }
-
- //停止服务
- bool CMatchServiceManager::StopService()
- {
- //状态判断
- ASSERT(m_bIsService == true);
-
- //设置状态
- m_bIsService = false;
-
- //释放指针
- if (m_pIGameMatchItem != NULL) SafeRelease(m_pIGameMatchItem);
-
- return true;
- }
-
- //启动服务
- bool CMatchServiceManager::StartService()
- {
- //状态判断
- ASSERT(m_bIsService == false);
- if (m_bIsService == true) return false;
-
- //设置状态
- m_bIsService = true;
-
- //启动通知
- if (m_pIGameMatchItem != NULL) m_pIGameMatchItem->OnStartService();
-
- return true;
- }
- //接口查询
- void * CMatchServiceManager::QueryInterface(const IID & Guid, DWORD dwQueryVer)
- {
- QUERYINTERFACE(IMatchServiceManager, Guid, dwQueryVer);
- QUERYINTERFACE_IUNKNOWNEX(IMatchServiceManager, Guid, dwQueryVer);
- return NULL;
- }
-
- //创建比赛
- bool CMatchServiceManager::CreateGameMatch(BYTE cbMatchType)
- {
- //接口判断
- ASSERT(m_pIGameMatchItem == NULL);
- if (m_pIGameMatchItem != NULL) return false;
-
- try
- {
- //定时赛
- if (cbMatchType == MATCH_TYPE_LOCKTIME)
- {
- m_pIGameMatchItem = new CLockTimeMatch();
- if (m_pIGameMatchItem == NULL) throw TEXT("定时赛创建失败!");
- }
-
- //即时赛
- if (cbMatchType == MATCH_TYPE_IMMEDIATE)
- {
- m_pIGameMatchItem = new CImmediateMatch();
- if (m_pIGameMatchItem == NULL) throw TEXT("即时赛创建失败!");
- }
- }
- catch (...)
- {
- ASSERT(FALSE);
- return false;
- }
-
- return m_pIGameMatchItem != NULL;
- }
-
- //初始化桌子框架
- bool CMatchServiceManager::BindTableFrame(ITableFrame * pTableFrame, WORD wTableID)
- {
- ASSERT(m_pIGameMatchItem != NULL);
- if (m_pIGameMatchItem != NULL)
- {
- return m_pIGameMatchItem->BindTableFrame(pTableFrame, wTableID);
- }
-
- return true;
- }
-
-
- //初始化接口
- bool CMatchServiceManager::InitMatchInterface(tagMatchManagerParameter & MatchManagerParameter)
- {
- ASSERT(m_pIGameMatchItem != NULL);
- if (m_pIGameMatchItem != NULL)
- {
- return m_pIGameMatchItem->InitMatchInterface(MatchManagerParameter);
- }
-
- return true;
- }
-
- //时间事件
- bool CMatchServiceManager::OnEventTimer(DWORD dwTimerID, WPARAM dwBindParameter)
- {
- ASSERT(m_pIGameMatchItem != NULL);
- if (m_pIGameMatchItem != NULL)
- {
- return m_pIGameMatchItem->OnEventTimer(dwTimerID, dwBindParameter);
- }
-
- return true;
- }
-
- //数据库事件
- bool CMatchServiceManager::OnEventDataBase(WORD wRequestID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize)
- {
- ASSERT(m_pIGameMatchItem != NULL);
- if (m_pIGameMatchItem != NULL)
- {
- return m_pIGameMatchItem->OnEventDataBase(wRequestID, pIServerUserItem, pData, wDataSize);
- }
-
- return true;
- }
-
-
- //命令消息
- bool CMatchServiceManager::OnEventSocketMatch(WORD wSubCmdID, VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID)
- {
- ASSERT(m_pIGameMatchItem != NULL);
- if (m_pIGameMatchItem != NULL)
- {
- return m_pIGameMatchItem->OnEventSocketMatch(wSubCmdID, pData, wDataSize, pIServerUserItem, dwSocketID);
- }
-
- return true;
- }
-
- //用户登录
- bool CMatchServiceManager::OnEventUserLogon(IServerUserItem * pIServerUserItem)
- {
- ASSERT(m_pIGameMatchItem != NULL);
- if (m_pIGameMatchItem != NULL)
- {
- return m_pIGameMatchItem->OnEventUserLogon(pIServerUserItem);
- }
-
- return true;
- }
-
- //用户登出
- bool CMatchServiceManager::OnEventUserLogout(IServerUserItem * pIServerUserItem)
- {
- ASSERT(m_pIGameMatchItem != NULL);
- if (m_pIGameMatchItem != NULL)
- {
- return m_pIGameMatchItem->OnEventUserLogout(pIServerUserItem);
- }
-
- return true;
- }
-
- //进入比赛
- bool CMatchServiceManager::OnEventEnterMatch(DWORD dwSocketID, VOID* pData, DWORD dwUserIP, bool bIsMobile)
- {
- ASSERT(m_pIGameMatchItem != NULL);
- if (m_pIGameMatchItem != NULL)
- {
- return m_pIGameMatchItem->OnEventEnterMatch(dwSocketID, pData, dwUserIP, bIsMobile);
- }
-
- return true;
-
- }
-
- //用户参赛
- bool CMatchServiceManager::OnEventUserJoinMatch(IServerUserItem * pIServerUserItem, BYTE cbReason, DWORD dwSocketID)
- {
- ASSERT(m_pIGameMatchItem != NULL);
- if (m_pIGameMatchItem != NULL)
- {
- return m_pIGameMatchItem->OnEventUserJoinMatch(pIServerUserItem, cbReason, dwSocketID);
- }
-
- return true;
- }
-
- //用户退赛
- bool CMatchServiceManager::OnEventUserQuitMatch(IServerUserItem * pIServerUserItem, BYTE cbReason, WORD *pBestRank, DWORD dwContextID)
- {
- ASSERT(m_pIGameMatchItem != NULL);
- if (m_pIGameMatchItem != NULL)
- {
- return m_pIGameMatchItem->OnEventUserQuitMatch(pIServerUserItem, cbReason, pBestRank, dwContextID);
- }
-
- return true;
- }
-
- //用户接口
- IUnknownEx * CMatchServiceManager::GetServerUserItemSink()
- {
- ASSERT(m_pIGameMatchItem != NULL);
- if (m_pIGameMatchItem != NULL)
- {
- return QUERY_OBJECT_PTR_INTERFACE(m_pIGameMatchItem, IServerUserItemSink);
- }
- return NULL;
- }
-
- //////////////////////////////////////////////////////////////////////////////////
-
- //组件创建函数
- DECLARE_CREATE_MODULE(MatchServiceManager);
-
- //////////////////////////////////////////////////////////////////////////
|