EasyDarwin添加自定义的服务模块EasyMyModule
2016-01-05 17:08
519 查看
EasyDarwin模块的要求
每个QTSS模块必须实现两个方法函数:一个Main入口函数,服务器在启动的时候将调用这个方法函数,来对您开发的模块所在的QTSS stub库进行初始化。
一个Dispatch(分发)函数,服务器为了某种特定的目的调用模块时,需要使用这个方法函数。
Main函数
每个EasyDarwin模块必须提供一个主函数。服务器在启动的时候会调用这个主函数,并使用这个函数来初始化QTSS stub库,以便在之后调用该模块。主函数体必须按照如下方式书写:
QTSS_Error EasyMyModule_Main(void* inPrivateArgs){ return _stublibrary_main(inPrivateArgs, EasyMyModuleDispatch);}
这里,EasyMyModuleDispatch是模块分发函数的名称,这个例程将在下文的“Dispatch函数”部分进行描述。
重要提示
对于代码片断模块,主例程必须命名为EasyMyModule_Main,其中EasyMyModule是包含模块的文件名称。
Dispatch函数
每个QTSS模块都必须提供一个分发函数。服务器为了某种特定的目的需要某个模块时,需要调用该模块的分发函数,并在调用时将任务的名称及相应的参数块传递给该函数。分发例程必须具有下面所示的原型:
void EasyMyModuleDispatch(QTSS_Role inRole, QTSS_RoleParamPtr inParams);
其中EasyMyModuleDispatch是分发函数的名称,由模块的主函数来指定;inRole是角色的名称,只有注册了该角色的模块才会被调用;inParams是一个结构,包含模块感兴趣的值。
将自定义模块编译为服务器的一部分
要将您的代码编译为服务器的一部分,需要在QTSServer.cpp文件中找到QTSServer::LoadCompiledInModules函数,并添加下面几行代码:[code]QTSSModule* theMyModule = new QTSSModule("EasyMyModule"); (void)theMyModule->SetupModule(&sCallbacks, &EasyMyModule_Main); (void)AddModule(theMyModule);
这里,EasyMyModule是指您的模块名称,EasyMyModule_Main则是您的模块的主函数。
某些平台要求模块需要使用唯一的函数名。在将模块编译为服务器的一部分时,为了避免名字冲突,请将您的函数声明为静态函数(static)。
被编译为服务器一部分的模块成为静态模块。
附上自定义模块代码
EasyMyModule.h[code]/* Copyright (c) 2013-2016 EasyDarwin.ORG. All rights reserved. Github: https://github.com/EasyDarwin WEChat: EasyDarwin Website: http://www.easydarwin.org */ /* File: EasyMyModule.h Contains: EasyDarwin HLS Module */ #ifndef _EASYMYMODULE_H_ #define _EASYMYMODULE_H_ #include "QTSS.h" extern "C" { EXPORT QTSS_Error EasyMyModule_Main(void* inPrivateArgs); } #endif //_EASYMYMODULE_H_
EasyMyModule.cpp
[code]/* Copyright (c) 2013-2016 EasyDarwin.ORG. All rights reserved. Github: https://github.com/EasyDarwin WEChat: EasyDarwin Website: http://www.easydarwin.org */ /* File: EasyMyModule.cpp Contains: Implementation of EasyMyModule class. */ #include "EasyMyModule.h" #include "QTSSModuleUtils.h" #include "OSArrayObjectDeleter.h" #include "OSMemory.h" #include "QTSSMemoryDeleter.h" #include "QueryParamList.h" #include "OSRef.h" #include "StringParser.h" #include "QTSServerInterface.h" // STATIC DATA static QTSS_PrefsObject sServerPrefs = NULL; //服务器主配置 static QTSS_ServerObject sServer = NULL; //QTSServer对象 static QTSS_ModulePrefsObject sModulePrefs = NULL; //当前模块配置 static StrPtrLen sHLSSuffix("EasyMyModule"); // FUNCTION PROTOTYPES static QTSS_Error EasyMyModuleDispatch(QTSS_Role inRole, QTSS_RoleParamPtr inParams); static QTSS_Error Register(QTSS_Register_Params* inParams); static QTSS_Error Initialize(QTSS_Initialize_Params* inParams); static QTSS_Error RereadPrefs(); // FUNCTION IMPLEMENTATIONS QTSS_Error EasyMyModule_Main(void* inPrivateArgs) { return _stublibrary_main(inPrivateArgs, EasyMyModuleDispatch); } QTSS_Error EasyMyModuleDispatch(QTSS_Role inRole, QTSS_RoleParamPtr inParams) { switch (inRole) { case QTSS_Register_Role: return Register(&inParams->regParams); case QTSS_Initialize_Role: return Initialize(&inParams->initParams); case QTSS_RereadPrefs_Role: return RereadPrefs(); } return QTSS_NoErr; } QTSS_Error Register(QTSS_Register_Params* inParams) { // Do role & attribute setup (void)QTSS_AddRole(QTSS_Initialize_Role); (void)QTSS_AddRole(QTSS_RereadPrefs_Role); // Tell the server our name! static char* sModuleName = "EasyMyModule"; ::strcpy(inParams->outModuleName, sModuleName); return QTSS_NoErr; } QTSS_Error Initialize(QTSS_Initialize_Params* inParams) { // Setup module utils QTSSModuleUtils::Initialize(inParams->inMessages, inParams->inServer, inParams->inErrorLogStream); // Setup global data structures sServerPrefs = inParams->inPrefs; sServer = inParams->inServer; sModulePrefs = QTSSModuleUtils::GetModulePrefsObject(inParams->inModule); RereadPrefs(); return QTSS_NoErr; } QTSS_Error RereadPrefs() { return QTSS_NoErr; }
获取更多信息
邮件:support@easydarwin.orgWEB:www.EasyDarwin.org
QQ交流群:288214068
Copyright © EasyDarwin.org 2012-2015
相关文章推荐
- 快的打车架构实践
- 81. Windows10 命令激活 180天循环
- Happiness -> Happier
- apache开源项目--gora
- apache开源项目--Apache Commons Imaging
- EasyDarwin添加自定义的服务模块EasyMyModule
- $.fn
- 动态合并单元格
- 深入理解BootStrap -- 按钮6
- Spring Boot 性能优化
- 用Spring+cxf 实现一个简单的restful webService
- Java String类中的equals方法
- c# 将秒数转换成时,分,秒的方法
- apache开源项目--Lens
- nginx提示Error: Too many open files的解决办法
- JMX初体验
- Linux shell脚本配合mysqldump备份mysql数据库
- 计算机基础题目汇总一
- iOS学习笔记:UITableViewcell 嵌套 UIWebView
- java中控制输出小数位数的方法