⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 queueserviceevent.cpp

📁 游戏框架
💻 CPP
字号:
// ***************************************************************
//  QueueServiceEvent   version:  1.0
//  -------------------------------------------------------------
//	File Name:	QueueServiceEvent.cpp
//	Created:	2007/07/18
//	Modified:	2007/07/18   16:43
//	Author:		William.Liang
//  Msn:		lwq49@msn.com
//  Email:		lwq49@21cn.com, lwq49@msn.com
//	Description:
//
//	Purpose:	
//  -------------------------------------------------------------
//  license:
//
//  The contents of this file are subject to the Mozilla Public
//  License Version 1.1 (the "License"); you may not use this file
//  except in compliance with the License. You may obtain a copy
//  of the License at http://www.mozilla.org/MPL/ Software dis-
//  tributed under the License is distributed on an "AS IS" 
//  basis, WITHOUT WARRANTY OF ANY KIND, either express or im-
//  plied. See the License for the specific language governing
//  rights and limitations under the License.
//
//  The Initial Developer of the Original Code is William.Liang .
//  Copyright (C) 2007 - All Rights Reserved.
// ***************************************************************
#include "StdAfx.h"
#include "QueueServiceEvent.h"

//************************************
// <p>Description: 构造函数</p>
//************************************
CQueueServiceEvent::CQueueServiceEvent()
{
	m_pIQueueService=NULL;
}

//************************************
// <p>Description: 析构函数</p>
//************************************
CQueueServiceEvent::~CQueueServiceEvent()
{
}

//************************************
// <p>Description: 设置接口</p>
// <p>Parameters:  </p>
// <p>    IUnknownEx * pIUnknownEx</p>
//
// <p>Returns:   bool</p>
//************************************
bool CQueueServiceEvent::SetQueueService(IUnknownEx * pIUnknownEx)
{
	_ASSERT(pIUnknownEx!=NULL);
	m_pIQueueService=GET_OBJECTPTR_INTERFACE(pIUnknownEx,IQueueService);
	_ASSERT(m_pIQueueService!=NULL);
	return (m_pIQueueService!=NULL);
}

//************************************
// <p>Description: 获取接口</p>
// <p>Parameters:  </p>
// <p>    const IID & Guid</p>
// <p>    DWORD dwQueryVer</p>
//
// <p>Returns:   void *</p>
//************************************
void * CQueueServiceEvent::GetQueueService(const IID & Guid, DWORD dwQueryVer)
{
	if (m_pIQueueService==NULL) return NULL;
	return m_pIQueueService->QueryInterface(Guid,dwQueryVer);
}

//************************************
// <p>Description: 是否有效</p>
//
// <p>Returns:   bool</p>
//************************************
bool CQueueServiceEvent::IsValid()
{
	return (m_pIQueueService!=NULL);
}

//************************************
// <p>Description: 定时器事件</p>
// <p>Parameters:  </p>
// <p>    WORD wTimerID</p>
// <p>    WPARAM wBindParam</p>
//
// <p>Returns:   bool</p>
//************************************
bool CQueueServiceEvent::PostTimerEvent(WORD wTimerID, WPARAM wBindParam)
{
	//效验参数
	_ASSERT(m_pIQueueService!=NULL);
	if (m_pIQueueService==NULL) return false;

	//投递消息
	NTY_TimerEvent * pTimerEvent=(NTY_TimerEvent *)m_cbBuffer;
	pTimerEvent->wTimerID=wTimerID;
	pTimerEvent->wBindParam=wBindParam;
	m_pIQueueService->AddToQueue(EVENT_TIMER,m_cbBuffer,sizeof(NTY_TimerEvent));

	return true;
}

//************************************
// <p>Description: 动作事件</p>
// <p>Parameters:  </p>
// <p>    IGameObject * pIGameObject</p>
// <p>    WORD wActionID</p>
// <p>    DWORD dwRepeatTimes</p>
// <p>    WPARAM wBindParam</p>
//
// <p>Returns:   bool</p>
//************************************
bool CQueueServiceEvent::PostActionEvent(IGameObject* pIGameObject, WORD wActionID, DWORD dwRepeatTimes, WPARAM wBindParam){
	//效验参数
	_ASSERT(m_pIQueueService!=NULL);
	if (m_pIQueueService==NULL) return false;

	//投递消息
	NTY_ActionEvent * pActionEvent=(NTY_ActionEvent *)m_cbBuffer;
	pActionEvent->pIGameObject	= pIGameObject;
	pActionEvent->wActionID		= wActionID;
	pActionEvent->dwRepeatTimes	= dwRepeatTimes;
	pActionEvent->wBindParam	= wBindParam;
	m_pIQueueService->AddToQueue(EVENT_ACTION,m_cbBuffer,sizeof(NTY_ActionEvent));

	return true;
}

//************************************
// <p>Description: 数据库事件</p>
// <p>Parameters:  </p>
// <p>    WORD wRequestID</p>
// <p>    WORD wIndex</p>
// <p>    WORD wRoundID</p>
// <p>    const void * pDataBuffer</p>
// <p>    WORD wDataSize</p>
//
// <p>Returns:   bool</p>
//************************************
bool CQueueServiceEvent::PostDataBaseEvent(WORD wRequestID, WORD wIndex, WORD wRoundID, const void * pDataBuffer, WORD wDataSize)
{
	//效验参数
	_ASSERT(m_pIQueueService!=NULL);
	_ASSERT((wDataSize+sizeof(NTY_DataBaseEvent))<=MAX_QUEUE_PACKET);
	if (m_pIQueueService==NULL) return false;
	if ((wDataSize+sizeof(NTY_DataBaseEvent))>MAX_QUEUE_PACKET) return false;

	//投递消息
	NTY_DataBaseEvent * pDataBaseEvent=(NTY_DataBaseEvent *)m_cbBuffer;
	pDataBaseEvent->wIndex=wIndex;
	pDataBaseEvent->wRequestID=wRequestID;
	pDataBaseEvent->wRoundID=wRoundID;
	if (wDataSize>0)
	{
		_ASSERT(pDataBuffer!=NULL);
		CopyMemory(m_cbBuffer+sizeof(NTY_DataBaseEvent),pDataBuffer,wDataSize);
	}
	m_pIQueueService->AddToQueue(EVENT_DATABASE,m_cbBuffer,sizeof(NTY_DataBaseEvent)+wDataSize);

	return true;
}

//************************************
// <p>Description: 网络应答事件</p>
// <p>Parameters:  </p>
// <p>    WORD wIndex</p>
// <p>    WORD wRoundID</p>
// <p>    DWORD dwClientIP</p>
//
// <p>Returns:   bool</p>
//************************************
bool CQueueServiceEvent::PostSocketAcceptEvent(WORD wIndex, WORD wRoundID, DWORD dwClientIP)
{
	//效验参数
	_ASSERT(m_pIQueueService!=NULL);
	if (m_pIQueueService==NULL) return false;

	//投递消息
	NTY_SocketAcceptEvent * pSocketAcceptEvent=(NTY_SocketAcceptEvent *)m_cbBuffer;
	pSocketAcceptEvent->wIndex=wIndex;
	pSocketAcceptEvent->wRoundID=wRoundID;
	pSocketAcceptEvent->dwClientIP=dwClientIP;
	m_pIQueueService->AddToQueue(EVENT_SOCKET_ACCEPT,m_cbBuffer,sizeof(NTY_SocketAcceptEvent));

	return true;
}

//************************************
// <p>Description: 网络读取事件</p>
// <p>Parameters:  </p>
// <p>    WORD wIndex</p>
// <p>    WORD wRoundID</p>
// <p>    CMD_Command Command</p>
// <p>    const void * pDataBuffer</p>
// <p>    WORD wDataSize</p>
//
// <p>Returns:   bool</p>
//************************************
bool CQueueServiceEvent::PostSocketReadEvent(WORD wIndex, WORD wRoundID, CMD_Command Command, const void * pDataBuffer, WORD wDataSize)
{
	//效验参数
	_ASSERT(m_pIQueueService!=NULL);
	_ASSERT((wDataSize+sizeof(NTY_SocketReadEvent))<=MAX_QUEUE_PACKET);
	if (m_pIQueueService==NULL) return false;
	if ((wDataSize+sizeof(NTY_SocketReadEvent))>MAX_QUEUE_PACKET) return false;

	//投递消息
	NTY_SocketReadEvent * pSocketReadEvent=(NTY_SocketReadEvent *)m_cbBuffer;
	pSocketReadEvent->wIndex=wIndex;
	pSocketReadEvent->wRoundID=wRoundID;
	pSocketReadEvent->Command=Command;
	pSocketReadEvent->wDataSize=wDataSize;
	if (wDataSize>0)
	{
		_ASSERT(pDataBuffer!=NULL);
		CopyMemory(m_cbBuffer+sizeof(NTY_SocketReadEvent),pDataBuffer,wDataSize);
	}
	m_pIQueueService->AddToQueue(EVENT_SOCKET_READ,m_cbBuffer,sizeof(NTY_SocketReadEvent)+wDataSize);

	return false;
}

//************************************
// <p>Description: 网络关闭事件</p>
// <p>Parameters:  </p>
// <p>    WORD wIndex</p>
// <p>    WORD wRoundID</p>
// <p>    DWORD dwClientIP</p>
// <p>    DWORD dwConnectSecond</p>
//
// <p>Returns:   bool</p>
//************************************
bool CQueueServiceEvent::PostSocketCloseEvent(WORD wIndex, WORD wRoundID, DWORD dwClientIP, DWORD dwConnectSecond)
{
	//效验参数
	_ASSERT(m_pIQueueService!=NULL);
	if (m_pIQueueService==NULL) return false;

	//投递消息
	NTY_SocketCloseEvent * pSocketCloseEvent=(NTY_SocketCloseEvent *)m_cbBuffer;
	pSocketCloseEvent->wIndex=wIndex;
	pSocketCloseEvent->wRoundID=wRoundID;
	pSocketCloseEvent->dwClientIP=dwClientIP;
	pSocketCloseEvent->dwConnectSecond=dwConnectSecond;
	m_pIQueueService->AddToQueue(EVENT_SOCKET_CLOSE,m_cbBuffer,sizeof(NTY_SocketCloseEvent));

	return true;
}

//网络连接事件
bool CQueueServiceEvent::PostSocketConnectEvent(int iErrorCode, LPCTSTR szErrorDesc){
	//效验参数
	_ASSERT(m_pIQueueService!=NULL);
	_ASSERT((sizeof(NTY_SocketConnectEvent))<=MAX_QUEUE_PACKET);
	if (m_pIQueueService==NULL) return false;
	if ((sizeof(NTY_SocketConnectEvent))>MAX_QUEUE_PACKET) return false;

	NTY_SocketConnectEvent* pSocketConnectEvent=(NTY_SocketConnectEvent*)m_cbBuffer;
	pSocketConnectEvent->iErrorCode = iErrorCode;
	CopyMemory(pSocketConnectEvent->szErrorDesc,szErrorDesc,128);
	m_pIQueueService->AddToQueue(EVENT_CLIENT_SOCKET_CONNECT,m_cbBuffer,sizeof(NTY_SocketConnectEvent));
	return true;
}

//网络读取事件
bool CQueueServiceEvent::PostSocketReadEvent(CMD_Command Command, const void * pDataBuffer, WORD wDataSize){
	//效验参数
	_ASSERT(m_pIQueueService!=NULL);
	_ASSERT((wDataSize+sizeof(NTY_SocketReadEvent))<=MAX_QUEUE_PACKET);
	if (m_pIQueueService==NULL) return false;
	if ((wDataSize+sizeof(NTY_SocketReadEvent))>MAX_QUEUE_PACKET) return false;

	//投递消息
	NTY_SocketReadEvent * pSocketReadEvent=(NTY_SocketReadEvent *)m_cbBuffer;
	pSocketReadEvent->Command=Command;
	pSocketReadEvent->wDataSize=wDataSize;
	if (wDataSize>0)
	{
		_ASSERT(pDataBuffer!=NULL);
		CopyMemory(m_cbBuffer+sizeof(NTY_SocketReadEvent),pDataBuffer,wDataSize);
	}
	m_pIQueueService->AddToQueue(EVENT_CLIENT_SOCKET_READ,m_cbBuffer,sizeof(NTY_SocketReadEvent)+wDataSize);

	return true;
}

//网络关闭事件
bool CQueueServiceEvent::PostSocketCloseEvent(){
	//效验参数
	_ASSERT(m_pIQueueService!=NULL);
	if (m_pIQueueService==NULL) return false;

	m_pIQueueService->AddToQueue(EVENT_CLIENT_SOCKET_CLOSE, NULL, 0);
	return true;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -