Skip to content

Commit

Permalink
Made sender name available to JSONPort output
Browse files Browse the repository at this point in the history
  • Loading branch information
neilstephens committed Mar 12, 2018
1 parent ae4dd89 commit e561fbb
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 8 deletions.
11 changes: 7 additions & 4 deletions JSONPort/JSONOutputTemplate.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,17 +36,18 @@ class JSONOutputTemplate
JSONOutputTemplate(const JSONOutputTemplate&) = delete;
JSONOutputTemplate& operator=(const JSONOutputTemplate&) = delete;

JSONOutputTemplate(const Json::Value& aJV, const std::string& ind_marker, const std::string& name_marker, const std::string& val_marker, const std::string& qual_marker, const std::string& time_marker):
JSONOutputTemplate(const Json::Value& aJV, const std::string& ind_marker, const std::string& name_marker, const std::string& val_marker, const std::string& qual_marker, const std::string& time_marker, const std::string& sender_marker):
NullJV(Json::Value::nullSingleton()),
JV(aJV),
ind_ref(find_marker(ind_marker,JV)),
name_ref(find_marker(name_marker,JV)),
val_ref(find_marker(val_marker,JV)),
qual_ref(find_marker(qual_marker,JV)),
time_ref(find_marker(time_marker,JV))
time_ref(find_marker(time_marker,JV)),
sender_ref(find_marker(sender_marker,JV))
{}
template<typename T>
Json::Value Instantiate(const T& event, uint16_t index, const std::string Name = "")
Json::Value Instantiate(const T& event, uint16_t index, const std::string Name = "", const std::string Sender = "")
{
Json::Value instance = JV;
if(!ind_ref.isNull())
Expand All @@ -59,12 +60,14 @@ class JSONOutputTemplate
find_marker(qual_ref.asString(), instance) = event.quality;
if(!time_ref.isNull())
find_marker(time_ref.asString(), instance) = (Json::UInt64)event.time.Get();
if(!sender_ref.isNull())
find_marker(sender_ref.asString(), instance) = Sender;
return instance;
}
private:
Json::Value NullJV;
const Json::Value JV;
const Json::Value &ind_ref, &name_ref, &val_ref, &qual_ref, &time_ref;
const Json::Value &ind_ref, &name_ref, &val_ref, &qual_ref, &time_ref, &sender_ref;
template<typename T>
T& find_marker(const std::string& marker, T& val)
{
Expand Down
6 changes: 4 additions & 2 deletions JSONPort/JSONPointConf.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,10 @@ void JSONPointConf::ProcessElements(const Json::Value& JSONRoot)
auto val_marker = JSONRoot["TemplateValue"].isString() ? JSONRoot["TemplateValue"].asString() : "<VALUE>";
auto qual_marker = JSONRoot["TemplateQuality"].isString() ? JSONRoot["TemplateQuality"].asString() : "<QUALITY>";
auto time_marker = JSONRoot["TemplateTimestamp"].isString() ? JSONRoot["TemplateTimestamp"].asString() : "<TIMESTAMP>";
auto sender_marker = JSONRoot["TemplateSender"].isString() ? JSONRoot["TemplateSender"].asString() : "<SENDER>";
if(JSONRoot.isMember("OutputTemplate"))
{
pJOT.reset(new JSONOutputTemplate(JSONRoot["OutputTemplate"],ind_marker,name_marker,val_marker,qual_marker,time_marker));
pJOT.reset(new JSONOutputTemplate(JSONRoot["OutputTemplate"],ind_marker,name_marker,val_marker,qual_marker,time_marker,sender_marker));
}
else
{
Expand All @@ -69,7 +70,8 @@ void JSONPointConf::ProcessElements(const Json::Value& JSONRoot)
temp["Value"] = val_marker;
temp["Quality"] = qual_marker;
temp["Timestamp"] = time_marker;
pJOT.reset(new JSONOutputTemplate(temp,ind_marker,name_marker,val_marker,qual_marker,time_marker));
temp["Sender"] = sender_marker;
pJOT.reset(new JSONOutputTemplate(temp,ind_marker,name_marker,val_marker,qual_marker,time_marker,sender_marker));
}

const Json::Value PointConfs = JSONRoot["JSONPointConf"];
Expand Down
4 changes: 2 additions & 2 deletions JSONPort/JSONPort.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -485,11 +485,11 @@ inline std::future<CommandStatus> JSONPort::EventT(const T& meas, uint16_t index
}
auto pConf = static_cast<JSONPortConf*>(this->pConf.get());

auto ToJSON = [pConf,index,&meas](std::map<uint16_t, Json::Value>& PointMap)->Json::Value
auto ToJSON = [pConf,index,&meas,&SenderName](std::map<uint16_t, Json::Value>& PointMap)->Json::Value
{
if(PointMap.count(index))
{
Json::Value output = pConf->pPointConf->pJOT->Instantiate(meas, index, PointMap[index]["Name"].asString());
Json::Value output = pConf->pPointConf->pJOT->Instantiate(meas, index, PointMap[index]["Name"].asString(),SenderName);
return output;
}
return Json::Value::nullSingleton();
Expand Down

0 comments on commit e561fbb

Please sign in to comment.