如何设计一个可以支持javascript插件的C++插件框架

问题描述:

我想为使用C++的IM应用程序设计一个插件系统。 IM应用程序也使用C++实现。该插件系统必须支持JavaScript插件。如何设计一个可以支持javascript插件的C++插件框架

这些插件可以与即时消息应用交互,例如,第三方开发者可以实现一个github-robot-plugin,它可以发送wenbhook消息到IM应用,只要他/她的项目在github上有任何改变有点像Slack除了Slack不是C++应用程序)。

我读过一篇文章Building Your Own Plugin Framework,其中实现了一个非常简单但完整的插件框架。它设计了一个插件管理器来管理任何插件的注册,创建和销毁。我从本文中学到的最重要的事情是每个插件本质上都是一个接口。

我已经实现了一个桥接类,它可以让javascript与C++进行交互。 JavaScript程序可以提供命令和一些参数,并通过桥类提供的方法调用C++来完成一些逻辑操作。例如,使用javascript插件,第三方开发人员必须提供一些html资源。如果点击一个名为“保存你的github帐户信息”的按钮,javascript会向桥发送一个名为“save_account_info”的命令,C++会将你的github帐户信息保存到本地数据库。

我不是很确定它是否是一个好主意,提供的接口如下第三开发人员必须实现,如果他们想使一个插件:

class IPlugin { 
public: 
    virtual std::string bridge_call(std::string cmd, Json params) = 0; 
}; 

class SomePlugin : public IPlugin { 
public: 
    virtual std::string bridge_call(std::string cmd, Json params) { 
    if (cmd == "some_command_1") { 
     // do logic1 
    } else if (cmd == "some_command_2") { 
     // do logic2 
    } 
    } 
}; 

任何建议非常赞赏。

也许这可以帮助你sourcemod.js(JS插件例如here

这是(对sourcepawn郎插件管理器)sourcemod的替代