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

📄 rpgcommand.cc

📁 五行MMORPG引擎系统V1.0
💻 CC
字号:
//RPGCommand.cc
/*/////////////////////////////////////////////////////////////////

   李亦
	liease@163.com 4040719
	2006-7-18
/*/////////////////////////////////////////////////////////////////
#include "rpg/cmd/RPGCommand.h"
#include "rpg/cmd/DBProxy.h"
#include "console/macroManager.h"
#include "rpg/cmd/RPGCallback.h"


namespace RPG
{

//#define RPGCMD_REG_MACRO(NAME)		gMacroDictionary.insert("##NAME##",NAME)


RPGCommand*	g_pRPGCommand	= NULL;
//static RPGCommand	gs_RPGCommand;

//FreeListChunker<GCMDTASK>	RPGCommand::ms_ParamPool;

StringTableEntry RPGCommand::ms_arCmdLabels[CMD_AMOUNT]=
{
	"CMD_UNKNOW",

	///////////////////////////////////////////
	//数据库操作指令
	"CMD_PP_LOGIN",
	"CMD_PP_PCLIST",
	"CMD_PC_LOAD",

	///////////////////////////////////////////
	//非数据库操作指令
	"CMD_NORMAL_BASE",

	"CMD_MAX"

};


IMPLEMENT_CONOBJECT(RPGCommand);

/////////////////////////////////////////////////////////////////
// class RPGCommand 构造函数 /析构函数
RPGCommand::RPGCommand()
//:m_cmdQueue(QUEUE_SIZE,QUEUE_GROW)
{
	//g_pRPGCommand	= this;
	//m_pCmdParam		= NULL;
	m_dwTaskSequence	= 0;
	//m_pClassName	= "RPGCommand";
	m_bProcessResult	= FALSE;
}

RPGCommand::~RPGCommand()
{
}


void RPGCommand::Initialize(CSTR pObjName)
{
	AssertWarn(g_pRPGCommand == NULL, "只能创建一个RPGCommand实例");
	g_pRPGCommand = new RPGCommand();
	g_pRPGCommand->registerObject(pObjName);

	StringTableEntry	pValue;
	//增加CMD_系列的脚本常量
	for(U32 n=0; n< CMD_AMOUNT; n++)
	{
		ms_arCmdLabels[n] = StringTable->insert(ms_arCmdLabels[n]);
		pValue = StringTable->insert( avar("%d",n) );
		gMacroDictionary.insert(ms_arCmdLabels[n], pValue );
	}

}

void RPGCommand::Destroy()
{
	if(g_pRPGCommand)
	{
		g_pRPGCommand->DestroyCommand();
		g_pRPGCommand = NULL;
	}
}

void RPGCommand::DestroyCommand()
{
	StopProcess();
#ifdef RPGCMD_USE_THREAD
	if(waitForExit())
#endif
		deleteObject();
}
//void RPGCommand::AdvanceTime(SimTime timeDelta)
//{
//	if(g_pRPGCallback == NULL || g_pRPGCommand == NULL)
//		return;
//
//	U32 nSize;
//	U32 n;
//	GCMDTASK			*pResult;
//	RPG_CALLBACK	pCallback;
//
//	g_pRPGCommand->m_mutexInst.lock(true);
//	for(;pResult = g_pRPGCommand->m_resultQueue.Shift() ;)
//	{
//		pCallback =  ms_arCallbacks[pResult->dwCmd];
//		if(pCallback)
//			pCallback(pResult);
//
//		g_pRPGCallback->ScriptCallback(pResult);
//		FreeCmdTask(pResult);
//	}
//	g_pRPGCommand->m_mutexInst.unlock();
//}
//


void RPGCommand::AdvanceTime(SimTime timeDelta)
{
	//if(g_pRPGCallback == NULL)
	//	return;

	U32 nSize;
	U32 n;
	GCMDTASK			*pResult;
	RPG_CALLBACK	pCallback;

	if(!m_mutexInst.lock(false))
		return;

	for(;pResult = m_resultQueue.Shift() ;)
	{
		Con::printf(" ------------- Callback %d %s", pResult->dwCmd,pResult->unParam1.str);
		if(g_pRPGCallback)
		{
			g_pRPGCallback->ProcessResult(pResult);
		}

		RPGCommand::FreeCmdTask(pResult);
	}

	m_mutexInst.unlock();
}
//void RPGCommand::Process()
//{
//}

S32 RPGCommand::OnSendingTask(GCMDTASK* pTask)
{
	m_dwTaskSequence++;
	if(m_dwTaskSequence == 0)
		m_dwTaskSequence =1;

	pTask->dwSequence = m_dwTaskSequence;

	if(pTask->dwCmd < CMD_NORMAL_BASE)
	{
		g_pDBProxy->GhostTask(pTask);
		return TO_OK;
	}

	/////////////////////////////////
	//逻辑处理

	return TO_OK;
}

S32 RPGCommand::OnRespondeTask(GCMDTASK* pTask)
{
	Con::printf("RPGCommand CMD: %d",pTask->dwCmd);
	//回调处理
	return TO_OK;
}


//
//void RPGCommand::SendCmd(U32 dwCmd,U32 dwParam1,U32 dwParam2)
//
//{
//	GCMDTASK* pParam = ms_ParamPool.alloc();
//	pParam->dwCmd = dwCmd;
//	pParam->dwParam1 = dwParam1;
//	pParam->dwParam2 = dwParam2;
//
//	m_cmdQueue.Push(pParam);
//}
//
//
//GCMDTASK* RPGCommand::BeginCmd(U32 dwCmd)
//{
//	AssertWarn(m_pCmdParam == NULL,"最近一次BeginCmd后,没有调用EndCmd");
//	if(m_pCmdParam)
//		EndCmd();
//
//	GCMDTASK* pParam = ms_ParamPool.alloc();
//	pParam->dwCmd = dwCmd;
//	
//	m_pCmdParam	= pParam;
//	return pParam;
//}
//
//void RPGCommand::EndCmd()
//{
//	m_cmdQueue.Push(m_pCmdParam);
//	m_pCmdParam = NULL;
//}

ConsoleMethodGroupBegin(RPGCommand, RPGCommandGroup, "RPGCommand组")

ConsoleMethod(RPGCommand,AddTask,bool,3,5,"RPGCommand.AddTask(cmd, param1, param2)")
{
	U32 dwCmd = dAtoi(argv[2]);
	if(dwCmd < 0 || dwCmd >= CMD_MAX)
		return false;

	StringTableEntry param1;
	StringTableEntry param2;

	if(argc < 5)
		param2 = StringTable->getBlank();
	else
		param2 = StringTable->insert(argv[4]);

	if(argc < 4)
		param1 = StringTable->getBlank();
	else
		param1 = StringTable->insert(argv[3]);

	return object->AddTask(dwCmd,(U32)param1,(U32)param2);
}


ConsoleMethodGroupEnd(RPGCommand, RPGCommandGroup)



};//namespace RPG

⌨️ 快捷键说明

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