📄 rpgcommand.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 + -