• 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/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 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.org

    WEB:www.EasyDarwin.org

    QQ交流群:288214068

    Copyright © EasyDarwin.org 2012-2015

    EasyDarwin

  • 相关阅读:
    安裝Node.js
    es match、match_phrase、query_string和term的区别
    ES系列十、ES常用查询API
    ElasticSearch 入门总结
    起立,老师好
    像哆啦A梦懂大雄一样懂客户,我们也会拥有百宝箱
    阿里云居然在偷偷发福利!
    别人家的公司又来了,这次竟然开起了演唱会
    听说国家博物馆收藏了一行代码 ???
    我还是那个我,为啥就被老板区别对待了呢?
  • 原文地址:https://www.cnblogs.com/babosa/p/5904672.html
Copyright © 2020-2023  润新知