[Ryzom_service]配置文件中StartCommands运行

[Ryzom_service]配置文件中StartCommands运行  

2010-09-21 11:23:42|  分类: Ryzom瑞泽姆传奇|举报|字号 订阅

[Ryzom_service]配置文件中StartCommands运行 - 陈波 - cp7618@yeah的博客
1)  配置信息于函数IService::main中得到调用:ICommand::execute (var->asString(i), CommandLog);
 
注意: 脚本命令不是通用的。具有一定的专用性。格式:类实例.类中函数 + 参数。
 
2)  第一行脚本内格格式:"moduleManager.createModule StandardGateway gw",意思是调用CModuleManager(单例模式)实例中的函数NLMISC_CLASS_COMMAND_DECL(createModule),生成一CStandardGateway实例,起别名为:glob_gw。说明如下: 
         a) "moduleManager"是个对象名称(objectName-相当于类实例)-都来自父类ICommandsHandler。在CCommandRegistry类的_CommandsHandlers容器中进行查找。要想拥有此对象,需先调用ICommandsHandler::registerCommandsHandler-->CCommandRegistry::registerNamedCommandHandler(ICommandsHandler *handler, const std::string &className)进行注册:1)注册类对象于容器_CommandsHandlers.add(name, handler)及2)注册获取此类对象中的命令操作handler->fillCommandsHandlerList(commands);于容器_CommandsHandlersClass。
    
         b) "createModule"是列表中命令名称(commandName-相当于类中函数)-函数形式是一样的,都如:typedef bool (T::*TCommand)(const std::string &rawCommandString, const std::vector<std::string> &args, NLMISC::CLog &log, bool quiet, bool human);。如上面所说2)的容器_CommandsHandlersClass中。生成的实例在进行initModule时,同时也被存储于CModuleManager容器_ModuleSocketsRegistry中。
    
        c)参数:StandardGateway gw,其中 “StandardGateway” 是个类名字(_ModuleClassName-相当于类)-都来自父类CModuleBase(IModule)。通过NLNET_REGISTER_MODULE_FACTORY注册一个类(CModuleFactory(IModuleFactory),CFactoryIndirectRegister,CFactoryIndirect),同时类CStandardGateway来自基类CModuleBase:class CModuleBase : public IModule, public NLMISC::ICommandsHandler。所以此类也同时也被注册于objectName容器中,就是上面的a)。注意基类CModuleBase中的命令列表(dump,plug,unplug,sendPing)

 
        注:a),b)两点可参考下面三个重要的宏定义:NLMISC_COMMAND_HANDLER_TABLE_BEGIN,NLMISC_COMMAND_HANDLER_ADD,NLMISC_COMMAND_HANDLER_TABLE_END。
 
3)  第二行脚本内格格式:"gw.transportAdd L5Transport l5". 调用已生成的CStandardGateway实例名gw中的一函数NLMISC_CLASS_COMMAND_DECL(transportAdd),生成一CGatewayL5Transport实例,起别名为:l5。参数说明:其中 “L5Transport” 是个类标志(_keyValue-相当于类)。要查找到“L5Transport” 类,必需通过NLMISC_REGISTER_OBJECT注册一个类(CFactoryRegister(IFactoryRegister),CFactory)。
 
4)  第三行脚本内格格式:"gw.transportCmd l5(open)"。调用已生成的CStandardGateway实例名gw中的一函数NLMISC_CLASS_COMMAND_DECL(transportCmd),同时调用上面已生成的CGatewayL5Transport实例名l5。参数说明:
l5(open),其中open是个commandName,表示发送"GW_L5_ADDTP"信息给其它服务。
 
 
5)  当moduleManager.createModule产生实例后,此实例将在主进程update时update.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值