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

📄 announce.cpp

📁 网络游戏魔域的服务端与客户端完整源代码 包括详细的说明文档与开发日志
💻 CPP
字号:
// Announce.cpp: implementation of the CAnnounce class.
//
//////////////////////////////////////////////////////////////////////
//#include "mapgroup.h"
#include "Announce.h"
#include "I_Role.h"
#include "AllMsg.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CAnnounce::CAnnounce()
{
}
CAnnounce::~CAnnounce()
{
	ANNOUNCEDATA_SET::iterator it=m_setData.begin();
	for (; it!=m_setData.end(); it++)
	{
		CAnnounceData* pData = *it;
		SAFE_RELEASE (pData);
	}
	m_setData.clear();
}
bool CAnnounce::Create(IDatabase* pDb,OBJID id)
{
	if(QueryAnnounceDataByOwner(id))
		return true;
	CHECKF (pDb);

	SQLBUF	szSQL;
	DEBUG_TRY
	sprintf(szSQL, "SELECT * FROM %s WHERE user_id = '%ld' LIMIT 1", _TBL_ANNOUNCE,id);
	IRecordset* pRes = pDb->CreateNewRecordset(szSQL);
	if (pRes)
	{
		CAnnounceData* pData = CAnnounceData::CreateNew();
		if (pData && pData->Create(pRes, pDb))
		{
			m_setData.push_back(pData);
		}
		else
		{
			SAFE_RELEASE (pData);
			SAFE_RELEASE (pRes);
			return false;
		}
		SAFE_RELEASE (pRes);
	}
    DEBUG_CATCH("CAnnounce::Create(IDatabase* pDb,OBJID id)");
	return true;
}
bool CAnnounce::Create(IDatabase* pDb)
{
	CHECKF (pDb);

	SQLBUF	szSQL;
	sprintf(szSQL, "SELECT * FROM %s", _TBL_ANNOUNCE);
	IRecordset* pRes = pDb->CreateNewRecordset(szSQL);
	if (pRes)
	{
		for (int i=0; i<pRes->RecordCount(); i++)
		{
			CAnnounceData* pData = CAnnounceData::CreateNew();
			if (pData && pData->Create(pRes, pDb))
			{
				m_setData.push_back(pData);
			}
			else
			{
				SAFE_RELEASE (pData);
				SAFE_RELEASE (pRes);
				return false;
			}

			pRes->MoveNext();
		}
		SAFE_RELEASE (pRes);
	}

	return true;
}
bool	CAnnounce::CreateNewAnnounce(const ST_ANNOUNCE_DATA* pInfo, IDatabase* pDb)
{
	CAnnounceData* pData = CAnnounceData::CreateNew();
	if (pData)
	{
		if (pData->CreateRecord(pInfo, pDb))
		{
			m_setData.push_back(pData);
			return true;
		}
		SAFE_RELEASE (pData);
	}
	return false;
}
bool	CAnnounce::DeleteAnnounceByObjID(OBJID idAnnounce)
{
	ANNOUNCEDATA_SET::iterator it=m_setData.begin();
	for (; it!=m_setData.end(); it++)
	{
		CAnnounceData* pData = *it;
		if (pData->GetID() == idAnnounce)
		{
			if (!pData->DeleteRecord())
				return false;
			m_setData.erase(it);
			SAFE_RELEASE (pData);
			return true;
		}
	}
	return false;
}
bool    CAnnounce::DeleteAnnounceByUserID(OBJID id,bool isDelete)
{
	ANNOUNCEDATA_SET::iterator it=m_setData.begin();
	for (; it!=m_setData.end(); it++)
	{
		CAnnounceData* pData = *it;
		if (pData && pData->GetInt(ANNOUNCEDATA_USER_ID) == id)
		{
			if(isDelete)
				if (!pData->DeleteRecord())
					return false;
			m_setData.erase(it);
			SAFE_RELEASE (pData);
			return true;
		}
	}
	return false;
}
CAnnounceData*	CAnnounce::QueryAnnounceDataByIndex(int nIdx)
{
	if (nIdx >= m_setData.size())
		return NULL;
	return m_setData[nIdx];
}
CAnnounceData*	CAnnounce::QueryAnnounceDataByID(OBJID idAnnounce)
{
	ANNOUNCEDATA_SET::iterator it=m_setData.begin();
	for (; it!=m_setData.end(); it++)
	{
		CAnnounceData* pData = *it;
		if (pData && pData->GetID() == idAnnounce)
			return pData;
	}
	return NULL;
}
CAnnounceData*	CAnnounce::QueryAnnounceDataByOwner(OBJID idUser)
{
	ANNOUNCEDATA_SET::iterator it=m_setData.begin();
	for (; it!=m_setData.end(); it++)
	{
		CAnnounceData* pData = *it;
		if (pData && pData->GetInt(ANNOUNCEDATA_USER_ID) == idUser)
			return pData;
	}
	return NULL;
}
bool	CAnnounce::SendAnnounceList(IRole* pRole, UCHAR usType, int nIndexBegin)
{
	CHECKF (pRole);
	if (GetAnnounceAmount() < nIndexBegin)	// 溢出检查
		return false;

	CMsgAnnounceList	msg;
	if (!msg.Create(usType))
		return false;
    if(usType == CHECK_BY_INDEX)
	{
		for (int i=0; i<_MAX_ANNOUNCE_PER_PAGE; i++)
		{
			CAnnounceData* pData = this->QueryAnnounceDataByIndex(nIndexBegin+i);
			if (!pData)
				break;
			if (!msg.Append(pData->GetID(), pData->GetStr(ANNOUNCEDATA_USER_NAME)))
				return false;
		}
		if(i == 0)
			pRole->SendSysMsg(STR_NOANY_ANNOUNCE);
	}
	else if(usType == CHECK_BY_ID)
	{
		CAnnounceData* pData = this->QueryAnnounceDataByID(nIndexBegin);
		if(!pData||!msg.Append(pData->GetID(),pData->GetStr(ANNOUNCEDATA_USER_NAME)))
			return false;
	}
	else if(usType == CHECK_BY_OWNER)
	{
		for(int i=0; i < nIndexBegin ;i++)
		{
			CAnnounceData* pData = this->QueryAnnounceDataByIndex(nIndexBegin+i);
			if (!pData)
				break;
			if (!msg.Append(pData->GetID(), pData->GetStr(ANNOUNCEDATA_USER_NAME)))
				return false;
			break;
		}
	}
	return pRole->SendMsg(&msg);
}
bool    CAnnounce::SendAnnounceSelf(IRole* pRole/*, OBJID idAnnounce*/)
{
	CHECKF (pRole);
	CMsgAnnounceInfo	msg;

	CAnnounceData* pData = this->QueryAnnounceDataByOwner(pRole->GetID());
	if (!pData)
		return false;
	if (!msg.Create(pData,_ANNOUNCE_USER_INFO))
		return false;
	return pRole->SendMsg(&msg);
}
bool	CAnnounce::SendAnnounceInfo(IRole* pRole, OBJID idAnnounce)
{
	CHECKF (pRole);
	CMsgAnnounceInfo	msg;

	CAnnounceData* pData = this->QueryAnnounceDataByID(idAnnounce);
	if (!pData)
		return false;
	if (!msg.Create(pData,_ANNOUNCE_USER_INFO))
		return false;
	return pRole->SendMsg(&msg);
}

⌨️ 快捷键说明

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