跳到主要内容

控制器插件入口

插件的入口模块

该模块作为插件的入口,类似程序的main函数。可以在插件里面定义多个入口模块和优先级,控制器加载的时候 按优先级依次加载。
入口模块加载可分为几个阶段。

  1. 合法校验:
    这个阶段主要处理插件是否合法可以加载。检查插件的包结构是否规范,版本是否符合要求等。
  2. 授权校验:
    在插件初始化之前进行授权校验,由插件开发者决定插件是否需要授权。需要二次授权的,授权通过才会往 下执行插件初始化加载流程。
  3. Init阶段:
    所有的插件加载构造完成之后,开始进行下一阶段的初始化。此阶段将会根据插件的入口模块的优先级排序, 按照优先级高的模块先执行规则,执行完之后才会开始下一个模块的执行。同优先级的执行顺序不固定。
  4. Start阶段:
    在所有的插件入口模块执行完Init阶段之后,开始执行Start阶段,这里执行逻辑同Init阶段,按照优先级 依次执行。可在Start阶段执行插件逻辑。
  5. Stop阶段:
    控制器退出之前,会调用该阶段进行资源的清理,此阶段执行逻辑依旧是按照模块的优先级依次执行。
  6. 析构阶段:
    此阶段会进行各入口模块的析构,析构顺序不固定。因此,对应析构资源回收有依赖的可根据优先级在Stop 阶段执行。

控制器插件校验阶段:
插件校验阶段

授权校验:
插件是否需要授权才可以使用。如果需要授权,针对每台机器必须授权才可以使用。可联系珞石获取针对每台机器的授权码。
授权控制在src/launch/authorize.cpp。
定义为true表示需要授权校验。默认不校验。

     EXPORT const bool plugin_need_authorize = false;  

控制器插件初始化流程
控制器插件初始化流程

使用示例:

#include "launch_api.hpp"

//1继承实现LaunchAPI并实现具体的Init,Start,Stop函数
class Launch:public xcore_api::launch::LaunchAPI{
public:
    explicit Launch();
    virtual void Init() override;
    virtual void Start() override;
    virtual void Stop() override;
    virtual ~Launch();
};
//2 在cpp中声明为入口模块
LAUNCH_MODULE_PRIORITY(Launch,0)//带优先级
LAUNCH_MODULE(Launch) //不带优先级
//3 实现具体的Init,Start,Stop函数

已在插件的src/launch模块实现该例子,用户只需要在具体的阶段注入自行实现的函数即可。