1、在下面的网站里,创建控制器项目和.cc等文件:(先用静态创建工程,再用动态创建控制器)
CHN 03 快速开始 · drogonframework/drogon Wiki · GitHubhttps://github.com/drogonframework/drogon/wiki/CHN-03-%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B
2、修改生成的.cc和.h文件,这里只要把行为树的.cpp和.h文件粘进来就可以了。
① 因为这里我们打算行为树是接收到信号被触发的,所有用POST方式,那么需要在.cc文件最后,加上相应POST的响应命令,如下所示:
Json::Value ret;
ret["code"] = 200;
std::string ip("192.168.13.18");
ret["dstnode"] = ip;
ret["msg"] = "success";
auto resp = HttpResponse::newHttpJsonResponse(ret);
callback(resp);
② 修改.h文件如下所示:(主要是分别在两端注释下加了两行代码,chatGPT解释)
第一行作用:将路径为"/trigger"的POST请求映射到function::trigger
控制器类中相应的处理方法。换句话说,当有一个POST请求发送到"/trigger"路径时,Drogon框架将调用function::trigger
控制器类中对应的方法来处理该请求。
第二行作用:处理接收到的HTTP请求。它接受一个指向 HttpRequest
对象的智能指针引用,用于获取请求的详细信息。另外,该函数还接受一个回调函数,当处理完请求后,可以使用回调函数来发送响应给客户端。
#pragma once
#include <drogon/HttpController.h>
using namespace drogon;
namespace container
{
class function : public drogon::HttpController<function>
{
public:
METHOD_LIST_BEGIN
// use METHOD_ADD to add your custom processing function here;
// METHOD_ADD(seepage::get, "/{2}/{1}", Get); // path is /container/seepage/{arg2}/{arg1}
// METHOD_ADD(seepage::your_method_name, "/{1}/{2}/list", Get); // path is /container/seepage/{arg1}/{arg2}/list
// ADD_METHOD_TO(seepage::your_method_name, "/absolute/path/{1}/{2}/list", Get); // path is /absolute/path/{arg1}/{arg2}/list
METHOD_ADD(function::trigger, "/trigger", Post);
METHOD_LIST_END
// your declaration of processing function maybe like this:
// void get(const HttpRequestPtr& req, std::function<void (const HttpResponsePtr &)> &&callback, int p1, std::string p2);
// void your_method_name(const HttpRequestPtr& req, std::function<void (const HttpResponsePtr &)> &&callback, double p1, int p2) const;
void trigger(const HttpRequestPtr &req, std::function<void (const HttpResponsePtr &)> &&callback);
};
}
3、把行为树文件夹目录下的其他内容粘贴过来。
4、修改CMakeLists.txt。【非常重要,成败在此!】
方法:将行为树的部分和原有创建的部分相结合,基本就是拼起来就行,不需要修改什么。
5、编译生成可执行文件后,执行代码;接着使用插件POST相应IP和端口的trigger,得到响应,大功告成!