15 const std::string & _brokerEndpoint,
16 const std::string & _serviceName,
19 RocServer(_ctx, _brokerEndpoint, _serviceName),
20 cameraSource(_cameraSource),
21 logger(ctx,
"inproc://log",
"camserver",
SSTR(
"camManager.", cameraSource.topic)) {
22 storageManager = &_storageManager;
26 unique_lock<mutex> _(extractorsMutex);
27 for(
auto extractorP: extractors) {
28 extractorP->stopServing();
33 Json::Value CamManager::call(
const std::string & name,
const Json::Value & arguments) {
34 if(name ==
"addExtractor") {
35 return addExtractor(arguments[0].asString(), arguments[1]);
36 }
else if(name ==
"listExtractors") {
38 }
else if(name ==
"removeExtractor") {
39 return removeExtractor(arguments[0].asString(), arguments[1].asString());
46 logger.
info(
SSTR(
"add Extractor: ", name,
" (", arguments,
") "));
47 auto identifier = arguments[0].asString();
49 unique_lock<mutex> _(extractorsMutex);
50 for(
auto extractorP: extractors) {
51 if(extractorP->type() == name && extractorP->identifier() == identifier) {
53 logger.
debug(
"already registered!");
54 return "already registered!";
59 if(name ==
"zmqPub") {
62 {
"inproc://output", identifier},
63 {arguments[1][0].asUInt(),
64 arguments[1][1].asUInt(),
65 arguments[1][2].asUInt(),
66 arguments[1][3].asUInt()});
67 }
else if(name ==
"fileStorage") {
69 if(arguments.size() > 1) {
70 maxFrames = arguments[1].asInt();
72 string metaData =
"{}";
73 if(arguments.size() > 2) {
74 metaData = arguments[2].asString();
77 if(arguments.size() > 3) {
78 fileCycling = arguments[3].asInt();
80 bool cumulative =
false;
81 if(arguments.size() > 4) {
82 cumulative = arguments[4].asBool();
85 if(arguments.size() > 5) {
86 if(cameraSource.
topic.compare(0, 4,
"vnir") == 0)
87 binning = arguments[5].asBool();
90 if(arguments.size() > 6) {
91 wantedFPS = arguments[6].asDouble();
93 extractor =
new FileStorageExtractor(
ctx, cameraSource, identifier, *storageManager, maxFrames, metaData, fileCycling, cumulative, binning, wantedFPS);
94 }
else if(name ==
"Stats") {
97 {
"inproc://log", identifier},
99 }
else if(name ==
"FFMpeg") {
100 auto encode_to = arguments[1];
104 encode_to.asString());
110 unique_lock<mutex> _(extractorsMutex);
111 extractors.push_back(extractor);
112 return Json::Value::null;
117 Json::Value ret(Json::ValueType::arrayValue);
118 unique_lock<mutex> _(extractorsMutex);
119 for(
auto extractorP: extractors) {
121 exId[
"type"] = extractorP->type();
122 exId[
"identifier"] = extractorP->identifier();
124 for(
auto param: extractorP->parameters()) {
125 params.append(param);
127 exId[
"parameters"] = params;
135 bool removedSomething =
false;
136 logger.
info(
SSTR(
"removing ", name,
" / ", identifier,
" extractor."));
138 unique_lock<mutex> _(extractorsMutex);
139 for(
auto it = extractors.begin(); it != extractors.end();) {
140 if((*it)->type() == name && (*it)->identifier() == identifier) {
141 (*it)->stopServing();
143 removedSomething =
true;
144 it = extractors.erase(it);
150 cout <<
"done removing." << endl;
151 if(removedSomething) {
152 return Json::Value::null;
void debug(const std::string &_msg)
Handles storage locations.
std::string SSTR(Args &&...components)
Creates a temporary string stream for string concatenation.
Json::Value listExtractors()
Json::Value removeExtractor(const std::string &name, const std::string &identifier)
Json::Value addExtractor(const std::string &name, const Json::Value &arguments)
CamManager(zmq::context_t &_ctx, const std::string &_brokerEndpoint, const std::string &_serviceName, const PubSubEndpoint &_cameraSource, StorageManager &_storageManager)
void info(const std::string &_msg)