-
Notifications
You must be signed in to change notification settings - Fork 6
AnyPlugin
为了基于 AnyPlugin 实现对任意内容的 HTML 展示,我们需要以下几个步骤
- 创建一个新的 .cc/.cpp/.cxx 文件(在你想要的位置);
- 定义 AnyPlugin 的派生类;
- 在派生类中实现两个 AnyPlugin 中的纯虚函数;
- 注册插件;
- 重新编译项目;
- 修改 json 文件;
- 运行项目,即可在浏览器中看到我们展示的内容。
- 进阶:以表格的形式展示 json 文件。
在我们想的一个位置,新建一个 .cc/.cpp/.cxx 文件,用于编写我们的 HTML 展示插件。
在这个示例中,我们新建一个 HtmlShowExample.cc
文件。
加载我们会用到的头文件 #include "topling/side_plugin_factory.h"
。
AnyPlugin 是一个纯抽象类,其中包括 Update 和 ToSring 两个函数需要派生类实现。
首先我们定义一个 AnyPlugin 的派生类 HtmlShowExample,并且实现其的两个纯虚函数如下:
#include "topling/side_plugin_factory.h"
namespace rocksdb {
class HtmlShowExample : public AnyPlugin {
public:
void Update(const json&, const SidePluginRepo&) {}
std::string ToString(const json& dump_options, const SidePluginRepo&) const {}
};
} // namespace rocksdb
注意
- 在我们实现 HTML 展示时,不会用到 Update 函数,但是依然需要将其定义出,且为空。
- 在 ToString 函数中,我们仅需要传入其第一个参数 dump_options,但我们可以不对这个参数做任何操作。
Update 函数在此处不会用到,定义为空,我们不再理会,下面说 ToString 函数。
ToString 函数的返回值是 std::string 类型,其返回的 string 字符串,会被无差别地打印在浏览器中。
我们修改上面的 ToString 函数如下:
std::string ToString(const json& dump_options, const SidePluginRepo&) const {
return "This is an example of HTML show.";
}
这样,我们就实现了一个简单的 HTML 展示插件。
在 HtmlShowExample.cc
文件的末尾,topling 的 namespace 内,输入下面的代码:
ROCKSDB_REG_DEFAULT_CONS(HtmlShowExample, AnyPlugin);
ROCKSDB_REG_AnyPluginManip("HtmlShowExample");
-
ROCKSDB_REG_DEFAULT_CONS(param1, param2, param3)
: 此宏适用于没有用到(const json&, const SidePluginRepo&)
构造参数的派生类。-
param1
: 即将在 json 中写入的插件注册名字,string 类型,需要加双引号。 -
param2
: 即将在 json 中写入的插件注册类名。 -
param3
: 填入父类,这里是 AnyPlugin。 - 注:如果
param1
和param2
的值是相同的,则可以省略param1
,如上代码所示。
-
-
ROCKSDB_REG_AnyPluginManip(param1)
: 用于注册派生于 AnyPlugin 类的插件。- 参数为即将在 json 中写入的插件注册名字,即与
ROCKSDB_REG_DEFAULT_CONS
的param1
相同。
- 参数为即将在 json 中写入的插件注册名字,即与
首先,我们需要把我们自定义的 HtmlShowExample.cc
添加到编译文件中,可能是 CmakeLists.txt,可能是 Makefile,也可能是一个编译脚本,这取决于你的项目的编译方法。然后,重新编译项目。
找到我们的 Home,添加字段
"AnyPlugin": {
"html-show-example": "HtmlShowExample"
},
-
AnyPlugin
: 我们插件继承的抽象类名。-
html-show-example
: 我们插件对象的变量名。 -
HtmlShowExample
: 在 json 中写入的插件注册名字,与上述ROCKSDB_REG_DEFAULT_CONS
的param1
相同。
-
运行编译后的项目,在浏览器中输入
192.168.31.2:8088/AnyPlugin/html-show-example
即可看到浏览器打印出了我们代码中 ToString 函数返回的值 "This is an example of HTML show."。
-
192.168.31.2:8088
: 我们数据库的地址与监听端口,监听端口号在 json 配置文件的http
字段中的listening_ports
字段中设定。 -
AnyPlugin
: 我们使用的抽象类。 -
html-show-example
: 我们插件对象的变量名。
直接展示 string 文件的可读性是很差的,我们可以把需要展示的配置项,存到一个 json 对象中,并通过 JsonToString
函数,将 json 对象中的内容,以表格的形式打印到浏览器中。
修改我们之前的 ToString 函数代码,其他部分保持不变。
std::string ToString(const json& dump_options, const SidePluginRepo&) const {
json js;
js["key1"] = "This is an example of HTML show 1.";
js["key2"] = 2;
return JsonToString(js, dump_options);
}
运行编译后的项目,在浏览器中输入
192.168.31.2:8088/AnyPlugin/html-show-example?html=1
-
html=1
:url 参数,表示将展示内容以表格的形式打印。
关于更多 url 参数信息、HTML 展示信息,查看文档 WebView。
现在,我们可以在浏览器中看到,我们以表格形式输出的内容了。