EasyDarwin添加自定义的服务模块EasyMyModule
来源:互联网 发布:淘宝被删除评价炒信用 编辑:程序博客网 时间:2024/05/17 03:11
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函数,并添加下面几行代码:
QTSSModule* theMyModule = new QTSSModule("EasyMyModule");(void)theMyModule->SetupModule(&sCallbacks, &EasyMyModule_Main);(void)AddModule(theMyModule);
这里,EasyMyModule是指您的模块名称,EasyMyModule_Main则是您的模块的主函数。
某些平台要求模块需要使用唯一的函数名。在将模块编译为服务器的一部分时,为了避免名字冲突,请将您的函数声明为静态函数(static)。
被编译为服务器一部分的模块成为静态模块。
附上自定义模块代码
EasyMyModule.h
/* 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
/* 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 DATAstatic QTSS_PrefsObject sServerPrefs = NULL; //服务器主配置static QTSS_ServerObject sServer = NULL; //QTSServer对象static QTSS_ModulePrefsObject sModulePrefs = NULL; //当前模块配置static StrPtrLen sHLSSuffix("EasyMyModule");// FUNCTION PROTOTYPESstatic 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 IMPLEMENTATIONSQTSS_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.org
WEB:www.EasyDarwin.org
QQ交流群:288214068
Copyright © EasyDarwin.org 2012-2015
- EasyDarwin添加自定义的服务模块EasyMyModule
- 添加自定义的Python模块方法
- 给任务栏右下角的服务模块添加tomcat服务
- 添加自定义android系统服务的方法
- Python添加自定义模块
- apache服务添加ssl模块
- openwrt 添加自定义内核模块
- openwrt 添加自定义内核模块
- Framework/base下添加自定义模块的编译
- Framework/base 下添加自定义模块的步骤
- Framework/base 下添加自定义模块的步骤
- Framework/base 下添加自定义模块的步骤
- Framework/base 下添加自定义模块的步骤
- 【discuzx2】在后台添加自定义DIY模块的方法
- 编译Framework/base 下添加自定义模块的步骤
- 【MATLAB】添加自定义的模块到simulink库浏览器
- python使用*.pth添加环境变量使用自定义模块的方法
- Linux添加自定义启动服务
- 利用开源软件打造自己的全功能远程工具
- 快的打车架构实践
- 81. Windows10 命令激活 180天循环
- 广播与多播介绍
- 谈谈怎么借钱给别人
- EasyDarwin添加自定义的服务模块EasyMyModule
- Java并发编程:线程池的使用
- 基础总结篇之一:Activity生命周期
- MySQL计数器
- Android中OkHttp的使用
- Eclipse连接Mysql数据库总结
- Socket心跳包机制及SO_KEEPALIVE套接口选项
- 关于Android6.0系统某些时候无法获取到相关权限的问题
- mysql使用utf8mb4