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

0 0
原创粉丝点击