EasyDarwin添加自定义的服务模块EasyMyModule
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/EasyDarwinWEChat: EasyDarwinWebsite: http://www.easydarwin.org
*/
/*File: EasyMyModule.hContains: 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/EasyDarwinWEChat: EasyDarwinWebsite: http://www.easydarwin.org
*/
/*File: EasyMyModule.cppContains: 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 utilsQTSSModuleUtils::Initialize(inParams->inMessages, inParams->inServer, inParams->inErrorLogStream);// Setup global data structuressServerPrefs = 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
转载于:https://www.cnblogs.com/babosa/p/9217956.html
EasyDarwin添加自定义的服务模块EasyMyModule相关推荐
- Discuz! X2.5 添加自定义数据调用模块(简单方法)
转:http://521-wf.com/archives/46.html Discuz! X2.5 添加自定义数据调用模块(简单方法) Discuz!X系列的diy功能还是相当不错的,在对其进行二次开 ...
- 下怎么运行sh脚本_基于CentOS7系统添加自定义脚本服务及参数说明,附实例
概述 centos6如果要添加自定义脚本服务只需要把脚本放到/etc/init.d然后授权后用chkconfig添加后就可以管理了,那么centos7又是怎么添加自定义脚本服务呢? CentOS7添加 ...
- springcloud系列三 搭建服务模块
搭建服务模块为了模拟正式开发环境,只是少写了service层直接在controller里面直接引用,直接上图和代码:更为方便: 创建完成之后加入配置: pom.xml文件: <?xml vers ...
- maven 聚合工程 用spring boot 搭建 spring cloud 微服务 模块式开发项目
项目的简单介绍: 项目采用maven聚合工程 用spring boot 搭建 spring cloud的微服务 模块式开发 项目的截图: 搭建开始: 能上图 我少打字 1.首先搭建maven的聚合工程 ...
- 轻量级RTSP服务模块和RTSP推流模块适用场景区别
好多开发者一直搞不清轻量级RTSP服务SDK和RTSP推流SDK的区别(Github下载地址),以下是相关区别: 1. 轻量级RTSP服务模块:轻量级RTSP服务解决的核心痛点是避免用户或者开发者单独 ...
- 微服务模块综合管理(模块视图管理,自动化热部署,前端资源实时刷新......)
一.微服务可视化整体管理 微服务模块太多,启动关闭等管理操作就会很复杂,用这种方法就会很方便管理 方法是 1 idea底下没有的找出services窗口 2 IDEA底边栏选services 2 选择 ...
- 《Cisco安全防火墙服务模块(FWSM)解决方案》——1.4 利用包检测技术
本节书摘来异步社区<Cisco安全防火墙服务模块(FWSM)解决方案>一书中的第1章,第1.4节,作者:[美]Ray Blair ,Arvind Durai,更多章节内容可以访问云栖社区& ...
- 开源流媒体云视频平台EasyDarwin中EasyCMS服务是如何进行命令转发和消息路由的
开源流媒体云视频平台EasyDarwin中EasyCMS服务是如何进行命令转发和消息路由的 EasyCMS介绍 EasyCMS做为EasyDarwin开源流媒体云平台解决方案的一部分,主要进行的是设备 ...
- 《Cisco安全防火墙服务模块(FWSM)解决方案》——2.7 软件架构
本节书摘来异步社区<Cisco安全防火墙服务模块(FWSM)解决方案>一书中的第2章,第2.7节,作者:[美]Ray Blair ,Arvind Durai,更多章节内容可以访问云栖社区& ...
- 模拟淘宝侧边服务模块鼠标悬停效果的三种实现方式总结
淘宝侧边服务模块图如下: 当我们把鼠标移到充话费这个模块上时,上面的图标会有一个快速的向上移动然后又回到原来位置的过程. 仔细观察后,可以将这个动画过程分解为三步: 图片向上移出并消失:这一步主要是靠 ...
最新文章
- 在.NET2.0中解析Json和Xml
- 基于词典的前缀扫描中文分词
- 【PC工具】复制翻译神器!有了这个开源免费的翻译软件,阅读英文文档变得再也不困难了...
- AcWing算法基础课 Level-2 第二讲 数据结构
- tar解压出错:gzip: stdin: unexpected end of file的解决
- Fiddler二次开发 C#
- 40. Combination Sum II **
- 环形缓冲区实现类(Delphi)
- 网络安全:堡垒机相关知识介绍
- 计组之总线:3、总线操作和定时(同步定时、异步定时、版同步通信、分离式通信)
- 爬虫究竟是合法还是违法的?
- 【动态规划】subsequence 1
- string 转换int
- linux 别名设置
- MOTU Digital Performer 11.0 WiN 老牌音乐制作宿主软件
- 模型--vgg16.npy下载
- PAT --- 1055.集体照 (25 分)
- 微信在线EXCEL自动统计人数
- 【电影】-功夫巨星成龙电影全集版-原创独门专藏-
- 当下的个人站长都用哪些模板做网站呢?