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相关推荐

  1. Discuz! X2.5 添加自定义数据调用模块(简单方法)

    转:http://521-wf.com/archives/46.html Discuz! X2.5 添加自定义数据调用模块(简单方法) Discuz!X系列的diy功能还是相当不错的,在对其进行二次开 ...

  2. 下怎么运行sh脚本_基于CentOS7系统添加自定义脚本服务及参数说明,附实例

    概述 centos6如果要添加自定义脚本服务只需要把脚本放到/etc/init.d然后授权后用chkconfig添加后就可以管理了,那么centos7又是怎么添加自定义脚本服务呢? CentOS7添加 ...

  3. springcloud系列三 搭建服务模块

    搭建服务模块为了模拟正式开发环境,只是少写了service层直接在controller里面直接引用,直接上图和代码:更为方便: 创建完成之后加入配置: pom.xml文件: <?xml vers ...

  4. maven 聚合工程 用spring boot 搭建 spring cloud 微服务 模块式开发项目

    项目的简单介绍: 项目采用maven聚合工程 用spring boot 搭建 spring cloud的微服务 模块式开发 项目的截图: 搭建开始: 能上图 我少打字 1.首先搭建maven的聚合工程 ...

  5. 轻量级RTSP服务模块和RTSP推流模块适用场景区别

    好多开发者一直搞不清轻量级RTSP服务SDK和RTSP推流SDK的区别(Github下载地址),以下是相关区别: 1. 轻量级RTSP服务模块:轻量级RTSP服务解决的核心痛点是避免用户或者开发者单独 ...

  6. 微服务模块综合管理(模块视图管理,自动化热部署,前端资源实时刷新......)

    一.微服务可视化整体管理 微服务模块太多,启动关闭等管理操作就会很复杂,用这种方法就会很方便管理 方法是 1 idea底下没有的找出services窗口 2 IDEA底边栏选services 2 选择 ...

  7. 《Cisco安全防火墙服务模块(FWSM)解决方案》——1.4 利用包检测技术

    本节书摘来异步社区<Cisco安全防火墙服务模块(FWSM)解决方案>一书中的第1章,第1.4节,作者:[美]Ray Blair ,Arvind Durai,更多章节内容可以访问云栖社区& ...

  8. 开源流媒体云视频平台EasyDarwin中EasyCMS服务是如何进行命令转发和消息路由的

    开源流媒体云视频平台EasyDarwin中EasyCMS服务是如何进行命令转发和消息路由的 EasyCMS介绍 EasyCMS做为EasyDarwin开源流媒体云平台解决方案的一部分,主要进行的是设备 ...

  9. 《Cisco安全防火墙服务模块(FWSM)解决方案》——2.7 软件架构

    本节书摘来异步社区<Cisco安全防火墙服务模块(FWSM)解决方案>一书中的第2章,第2.7节,作者:[美]Ray Blair ,Arvind Durai,更多章节内容可以访问云栖社区& ...

  10. 模拟淘宝侧边服务模块鼠标悬停效果的三种实现方式总结

    淘宝侧边服务模块图如下: 当我们把鼠标移到充话费这个模块上时,上面的图标会有一个快速的向上移动然后又回到原来位置的过程. 仔细观察后,可以将这个动画过程分解为三步: 图片向上移出并消失:这一步主要是靠 ...

最新文章

  1. 在.NET2.0中解析Json和Xml
  2. 基于词典的前缀扫描中文分词
  3. 【PC工具】复制翻译神器!有了这个开源免费的翻译软件,阅读英文文档变得再也不困难了...
  4. AcWing算法基础课 Level-2 第二讲 数据结构
  5. tar解压出错:gzip: stdin: unexpected end of file的解决
  6. Fiddler二次开发 C#
  7. 40. Combination Sum II **
  8. 环形缓冲区实现类(Delphi)
  9. 网络安全:堡垒机相关知识介绍
  10. 计组之总线:3、总线操作和定时(同步定时、异步定时、版同步通信、分离式通信)
  11. 爬虫究竟是合法还是违法的?
  12. 【动态规划】subsequence 1
  13. string 转换int
  14. linux 别名设置
  15. MOTU Digital Performer 11.0 WiN 老牌音乐制作宿主软件
  16. 模型--vgg16.npy下载
  17. PAT --- 1055.集体照 (25 分)
  18. 微信在线EXCEL自动统计人数
  19. 【电影】-功夫巨星成龙电影全集版-原创独门专藏-
  20. 当下的个人站长都用哪些模板做网站呢?

热门文章

  1. Oracle手工创建数据库
  2. Eucalyptus-NC管理
  3. Oracle下sqlplus无法使用命令退格删除和历史记录的解决方法--使用rlwrap
  4. 纯CSS实现鼠标滑过缩略图放大显示代码
  5. Docker 为什么输给了Kubernetes?Docker 员工自述!
  6. 从张一鸣和黄峥的离职信中,我们发现了四个共同点
  7. 因为一条SQL,我差点被祭天......
  8. Java中的锁原理、锁优化、CAS、AQS
  9. 推荐一份 Google 面试指南
  10. java数组基本操作