提交 88905dc6 authored 作者: blu's avatar blu

big refacting of communitation architect

上级 3b44a61e
...@@ -26,28 +26,31 @@ objs/database.o: database.cpp inc/database.h ...@@ -26,28 +26,31 @@ objs/database.o: database.cpp inc/database.h
objs/zmqhelper.o: inc/zmqhelper.cpp inc/zmqhelper.hpp objs/zmqhelper.o: inc/zmqhelper.cpp inc/zmqhelper.hpp
$(CPP) $(CPPFLAGS) $(LD_FLAGS) -c inc/zmqhelper.cpp -o objs/zmqhelper.o $(HEADERS) $(CPP) $(CPPFLAGS) $(LD_FLAGS) -c inc/zmqhelper.cpp -o objs/zmqhelper.o $(HEADERS)
evmgr: evmgr.cpp database.cpp inc/utils.hpp inc/common.hpp objs/database.o objs/zmqhelper.o inc/tinythread.hpp $(SQLITE_SRC) objs/utils.o: inc/utils.cpp inc/utils.hpp
$(CPP) $(CPPFLAGS) $(LD_FLAGS) -o evmgr evmgr.cpp $(SQLITE) objs/database.o objs/zmqhelper.o $(HEADERS) $(LIBFFMPEG) `pkg-config --cflags --libs vendor/lib/pkgconfig/libzmq.pc` $(LIBS) $(CPP) $(CPPFLAGS) $(LD_FLAGS) -c inc/utils.cpp -o objs/utils.o $(HEADERS)
evpuller: evpuller.cpp database.cpp inc/av_common.hpp inc/utils.hpp inc/common.hpp objs/database.o objs/zmqhelper.o inc/tinythread.hpp $(SQLITE_SRC) evmgr: evmgr.cpp database.cpp objs/utils.o inc/common.hpp objs/database.o objs/zmqhelper.o inc/tinythread.hpp $(SQLITE_SRC)
$(CPP) $(CPPFLAGS) $(LD_FLAGS) -o evpuller evpuller.cpp $(SQLITE) objs/database.o objs/zmqhelper.o $(HEADERS) $(LIBFFMPEG) `pkg-config --cflags --libs vendor/lib/pkgconfig/libzmq.pc` $(LIBS) $(CPP) $(CPPFLAGS) $(LD_FLAGS) -o evmgr evmgr.cpp objs/utils.o $(SQLITE) objs/database.o objs/zmqhelper.o $(HEADERS) $(LIBFFMPEG) `pkg-config --cflags --libs vendor/lib/pkgconfig/libzmq.pc` $(LIBS)
evpusher: evpusher.cpp inc/common.hpp inc/av_common.hpp inc/utils.hpp inc/tinythread.hpp objs/database.o objs/zmqhelper.o $(SQLITE_SRC) evpuller: evpuller.cpp database.cpp inc/av_common.hpp objs/utils.o inc/common.hpp objs/database.o objs/zmqhelper.o inc/tinythread.hpp $(SQLITE_SRC)
$(CPP) $(CPPFLAGS) $(LD_FLAGS) -o evpusher evpusher.cpp objs/database.o objs/zmqhelper.o $(SQLITE) $(LIBFFMPEG) $(HEADERS) `pkg-config --cflags --libs vendor/lib/pkgconfig/libzmq.pc` $(LIBS) $(CPP) $(CPPFLAGS) $(LD_FLAGS) -o evpuller evpuller.cpp objs/utils.o $(SQLITE) objs/database.o objs/zmqhelper.o $(HEADERS) $(LIBFFMPEG) `pkg-config --cflags --libs vendor/lib/pkgconfig/libzmq.pc` $(LIBS)
evslicer: evslicer.cpp inc/common.hpp inc/av_common.hpp inc/utils.hpp inc/tinythread.hpp objs/database.o objs/zmqhelper.o $(SQLITE_SRC) evpusher: evpusher.cpp inc/common.hpp inc/av_common.hpp objs/utils.o inc/tinythread.hpp objs/database.o objs/zmqhelper.o $(SQLITE_SRC)
$(CPP) $(CPPFLAGS) $(LD_FLAGS) -o evslicer evslicer.cpp objs/database.o objs/zmqhelper.o $(SQLITE) $(LIBFFMPEG) $(HEADERS) `pkg-config --cflags --libs vendor/lib/pkgconfig/libzmq.pc` $(LIBS) $(CPP) $(CPPFLAGS) $(LD_FLAGS) -o evpusher evpusher.cpp objs/database.o objs/utils.o objs/zmqhelper.o $(SQLITE) $(LIBFFMPEG) $(HEADERS) `pkg-config --cflags --libs vendor/lib/pkgconfig/libzmq.pc` $(LIBS)
evmlmotion: evmlmotion.cpp inc/common.hpp inc/av_common.hpp inc/utils.hpp inc/avcvhelpers.hpp objs/database.o objs/zmqhelper.o inc/tinythread.hpp $(SQLITE_SRC) evslicer: evslicer.cpp inc/common.hpp inc/av_common.hpp objs/utils.o inc/tinythread.hpp objs/database.o objs/zmqhelper.o $(SQLITE_SRC)
$(CPP) $(CPPFLAGS) $(LD_FLAGS) -o evmlmotion evmlmotion.cpp objs/database.o objs/zmqhelper.o $(SQLITE) $(LIBFFMPEG) $(HEADERS) $(LIBOPENCV) `pkg-config --cflags --libs vendor/lib/pkgconfig/libzmq.pc` $(LIBS) $(CPP) $(CPPFLAGS) $(LD_FLAGS) -o evslicer evslicer.cpp objs/database.o objs/utils.o objs/zmqhelper.o $(SQLITE) $(LIBFFMPEG) $(HEADERS) `pkg-config --cflags --libs vendor/lib/pkgconfig/libzmq.pc` $(LIBS)
evmlmotion_d: evmlmotion.cpp inc/common.hpp inc/av_common.hpp inc/utils.hpp inc/avcvhelpers.hpp objs/database.o objs/zmqhelper.o inc/tinythread.hpp $(SQLITE_SRC)
$(CPP) $(CPPFLAGS) -DDEBUG $(LD_FLAGS) -o evmlmotion_d evmlmotion.cpp objs/database.o objs/zmqhelper.o $(SQLITE) $(LIBFFMPEG) $(HEADERS) $(LIBOPENCV) `pkg-config --cflags --libs vendor/lib/pkgconfig/libzmq.pc` $(LIBS)
evdaemon: evdaemon.cpp inc/common.hpp inc/utils.hpp objs/database.o objs/zmqhelper.o inc/tinythread.hpp database.cpp evmlmotion: evmlmotion.cpp inc/common.hpp inc/av_common.hpp objs/utils.o inc/avcvhelpers.hpp objs/database.o objs/zmqhelper.o inc/tinythread.hpp $(SQLITE_SRC)
$(CPP) $(CPPFLAGS) $(LD_FLAGS) -o evdaemon evdaemon.cpp objs/database.o objs/zmqhelper.o $(SQLITE) $(HEADERS) `pkg-config --cflags --libs vendor/lib/pkgconfig/libzmq.pc` $(LIBS) $(CPP) $(CPPFLAGS) $(LD_FLAGS) -o evmlmotion evmlmotion.cpp objs/database.o objs/utils.o objs/zmqhelper.o $(SQLITE) $(LIBFFMPEG) $(HEADERS) $(LIBOPENCV) `pkg-config --cflags --libs vendor/lib/pkgconfig/libzmq.pc` $(LIBS)
evmlmotion_d: evmlmotion.cpp inc/common.hpp inc/av_common.hpp objs/utils.o inc/avcvhelpers.hpp objs/database.o objs/zmqhelper.o inc/tinythread.hpp $(SQLITE_SRC)
$(CPP) $(CPPFLAGS) -DDEBUG $(LD_FLAGS) -o evmlmotion_d evmlmotion.cpp objs/database.o objs/utils.o objs/zmqhelper.o $(SQLITE) $(LIBFFMPEG) $(HEADERS) $(LIBOPENCV) `pkg-config --cflags --libs vendor/lib/pkgconfig/libzmq.pc` $(LIBS)
evcloudsvc: evcloudsvc.cpp inc/utils.hpp objs/database.o objs/zmqhelper.o inc/tinythread.hpp evdaemon: evdaemon.cpp inc/common.hpp objs/utils.o objs/database.o objs/zmqhelper.o inc/tinythread.hpp database.cpp
$(CPP) $(CPPFLAGS) $(LD_FLAGS) -o evcloudsvc evcloudsvc.cpp objs/database.o objs/zmqhelper.o $(SQLITE) $(HEADERS) `pkg-config --cflags --libs vendor/lib/pkgconfig/libzmq.pc` $(LIBS) $(CPP) $(CPPFLAGS) $(LD_FLAGS) -o evdaemon evdaemon.cpp objs/database.o objs/utils.o objs/zmqhelper.o $(SQLITE) $(HEADERS) `pkg-config --cflags --libs vendor/lib/pkgconfig/libzmq.pc` $(LIBS)
evcloudsvc: evcloudsvc.cpp objs/utils.o objs/database.o objs/zmqhelper.o inc/tinythread.hpp
$(CPP) $(CPPFLAGS) $(LD_FLAGS) -o evcloudsvc evcloudsvc.cpp objs/utils.o objs/database.o objs/zmqhelper.o $(SQLITE) $(HEADERS) `pkg-config --cflags --libs vendor/lib/pkgconfig/libzmq.pc` $(LIBS)
rtspr: rtsp-relay.cpp rtspr: rtsp-relay.cpp
$(CPP) $(CPPFLAGS) $(LD_FLAGS) -o rtspr rtsp-relay.cpp $(LIBFFMPEG) $(LD_FLAGS) $(CPP) $(CPPFLAGS) $(LD_FLAGS) -o rtspr rtsp-relay.cpp $(LIBFFMPEG) $(LD_FLAGS)
......
...@@ -10,6 +10,12 @@ ...@@ -10,6 +10,12 @@
#include "spdlog/spdlog.h" #include "spdlog/spdlog.h"
#include "httplib.h" #include "httplib.h"
#define EVCLOUD_REQ_E_CONN -2
#define EVCLOUD_REQ_E_DATA -3
#define EVCLOUD_REQ_E_PARAM -4
#define EVCLOUD_REQ_E_ABORT -5
#define EVCLOUD_REQ_E_NONE 0
using namespace std; using namespace std;
using namespace nlohmann; using namespace nlohmann;
using namespace httplib; using namespace httplib;
...@@ -18,208 +24,22 @@ using namespace httplib; ...@@ -18,208 +24,22 @@ using namespace httplib;
namespace cloudutils namespace cloudutils
{ {
/// [deprecated] ref: ../config.json /// [deprecated] ref: ../config.json
json registry(json &conf, string sn, string module) { json registry(json &conf, string sn, string module);
json ret;
string api;
try{
api = conf.at("data").at(sn).at("api-cloud").get<string>() + "/register";
Uri uri=Uri::Parse(api);
if(uri.Host.empty()||uri.Port.empty()||uri.Protocol.find("http") == string::npos||uri.Path.empty()) {
string msg = "registry error. invalid api-cloud in config: " + api;
ret["code"] = 1;
ret["msg"] = msg;
spdlog::error(msg);
return ret;
}
Params params;
params.emplace("sn", sn);
params.emplace("module", module);
Client cli(uri.Host.c_str(), stoi(uri.Port));
auto res = cli.Post("/register", Headers(), params, conf.dump(), "text/json");
spdlog::debug("{} {} registry res from cloud : {}", __FILE__, __LINE__, res->body);
ret = json::parse(res->body);
}catch(exception &e) {
ret["code"] = -1;
string msg = string(__FILE__) + ":" + to_string(__LINE__) + string(": registry exception - ") + e.what();
ret["msg"] = msg;
spdlog::error(msg);
}
// /Client cli;
return ret;
}
#define EVCLOUD_REQ_E_CONN -2
#define EVCLOUD_REQ_E_DATA -3
#define EVCLOUD_REQ_E_PARAM -4
#define EVCLOUD_REQ_E_ABORT -5
#define EVCLOUD_REQ_E_NONE 0
/// req config /// req config
json reqConfig(json &info){ json reqConfig(json &info);
json ret;
string api;
try{
api = info.at("api-cloud").get<string>();
Uri uri=Uri::Parse(api);
string sn = info.at("sn").get<string>();
if(uri.Host.empty()||uri.Port.empty()||uri.Protocol.find("http") == string::npos) {
string msg = string(__FILE__) +":" + to_string(__LINE__) + ": request cloud configuration error. invalid api-cloud in info: " + api;
ret["code"] = EVCLOUD_REQ_E_PARAM;
ret["msg"] = msg;
spdlog::error(msg);
return ret;
}
Params params;
params.emplace("sn", sn);
Client cli(uri.Host.c_str(), stoi(uri.Port));
auto res = cli.Get("/config", Headers(), params);
if(res == nullptr || res->status != 200) {
const char *msg = NULL;
if(res == nullptr) {
msg = (string("error to connect to server: ") + api + "/config").c_str();
ret["code"] = EVCLOUD_REQ_E_CONN;
}else{
msg = httplib::detail::status_message(res->status);
ret["code"] = res->status;
}
spdlog::debug("failed to reqConfig. {}", msg);
ret["msg"] = msg;
}else{
spdlog::debug("{} {} registry res from cloud : {}", __FILE__, __LINE__, res->body);
ret = json::parse(res->body);
}
}catch(exception &e) {
ret["code"] = EVCLOUD_REQ_E_DATA;
string msg = string(__FILE__) + ":" + to_string(__LINE__) + string(": registry exception - ") + e.what();
ret["msg"] = msg;
spdlog::error(msg);
}
// /Client cli;
return ret;
}
} // namespace cloudutils } // namespace cloudutils
/// ///
namespace strutils{ namespace strutils{
vector<string> split(const std::string& s, char delimiter) vector<string> split(const std::string& s, char delimiter);
{
std::vector<std::string> tokens;
std::string token;
std::istringstream tokenStream(s);
while (getline(tokenStream, token, delimiter))
{
tokens.push_back(token);
}
return tokens;
}
}//namespace strutils }//namespace strutils
namespace cfgutils { namespace cfgutils {
int getPeerId(string modName, json& modElem, string &peerId, string &peerName) { int getPeerId(string modName, json& modElem, string &peerId, string &peerName);
try { json *findModuleConfig(string peerId, json &data);
if(modName == "evmgr") { }
peerId = modElem["sn"].get<string>() + ":evmgr:0";
peerName = modName;
}else if(modName == "evml") {
peerId = modElem["sn"].get<string>() + ":evml" + modElem["type"].get<string>() + ":" + to_string(modElem["iid"]);
peerName = modName + modElem["type"].get<string>();
}else{
peerId = modElem["sn"].get<string>() + ":" + modName + ":" + to_string(modElem["iid"]);
peerName = modName;
}
}catch(exception &e) {
spdlog::error("failed to get gid for {} in {}: {}", modName, modElem.dump(), e.what());
return -1;
}
return 0;
}
json *findModuleConfig(string peerId, json &data) {
json *ret = NULL;
auto pp = strutils::split(peerId, ':');
if(pp.size() != 3) {
spdlog::error("invalid peerId: {}", peerId);
return ret;
}
string sn = pp[0];
string modName = pp[1];
string iid = pp[2];
//
string subMn = modName.substr(0,4);
if(subMn == "evml") {
subMn = modName.substr(4, modName.size());
}else{
subMn = "";
}
try{
for(auto &[k,v]: data.items()) {
// it's evmgr
if(modName == "evmgr") {
if(k == sn) {
ret = &v;
break;
}
}else{
json &ipcs = v["ipcs"];
for(auto &ipc: ipcs) {
json &modules = ipc["modules"];
// not evml
if(subMn.empty()) {
if(modules.count(modName) != 0) {
json &ml = modules[modName];
for(auto &m : ml) {
if(m["sn"] == sn && to_string(m["iid"]) == iid && m["enabled"] != 0) {
ret = &v;
break;
}
}
}
}else{
if(modules.count("evml") != 0) {
json &ml = modules["evml"];
for(auto &m: ml) {
if(subMn == m["type"] && to_string(m[iid]) == iid && m["sn"] == sn && m["enabled"] != 0) {
ret = &v;
break;
}
}
}
}
if(ret != NULL) break;
}
}
}
}catch(exception &e) {
spdlog::error("find module {} in {} exception: {}", peerId, data.dump(), e.what());
return NULL;
}
return ret;
}
} // cfgutils
struct StrException : public std::exception struct StrException;
{
std::string s;
StrException(std::string ss) : s(ss) {}
~StrException() throw () {} // Updated
const char* what() const throw() { return s.c_str(); }
};
#endif #endif
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论