History

TimeSeriesPlatformLibrary: Updated sample code to use latest common types and functions.

J. Ritchie Carroll committed 7 years ago

Commit d7733e71 parent 324c0c45 files · +43 −77Browse files

Showing the changes to Source/Libraries/TimeSeriesPlatformLibrary/Samples/SubscriberHandler.cpp (1 of 5 files). Show all

Unified · Split

Source/Libraries/TimeSeriesPlatformLibrary/Samples/SubscriberHandler.cpp+20−29
@@ -22,18 +22,18 @@ · 21 unmodified lines
22//******************************************************************************************************22//******************************************************************************************************
23 23
24#include "SubscriberHandler.h"24#include "SubscriberHandler.h"
25
26// TODO: These includes are just for temporary testing code
27#include "../Common/Convert.h"25#include "../Common/Convert.h"
28#include <boost/uuid/uuid_io.hpp>
29 26
30using namespace std;27using namespace std;
31using namespace GSF;28using namespace GSF;
32using namespace GSF::TimeSeries;29using namespace GSF::TimeSeries;
33using namespace GSF::TimeSeries::Transport;30using namespace GSF::TimeSeries::Transport;
34 31
32Mutex SubscriberHandler::s_coutLock {};
33
35SubscriberHandler::SubscriberHandler(string name) :34SubscriberHandler::SubscriberHandler(string name) :
36 m_name(std::move(name))35 m_name(std::move(name)),
36 m_processCount(0L)
37{37{
38}38}
39 39
@@ -79,9 +79,10 @@ void SubscriberHandler::StatusMessage(const string& message) · 39 unmodified lines
79 79
80 status << "[" << m_name << "] " << message;80 status << "[" << m_name << "] " << message;
81 81
82 m_coutLock.lock();82 // Calls can come from multiple threads, so we impose a simple lock before write to console
83 s_coutLock.lock();
83 SubscriberInstance::StatusMessage(status.str());84 SubscriberInstance::StatusMessage(status.str());
84 m_coutLock.unlock();85 s_coutLock.unlock();
85}86}
86 87
87void SubscriberHandler::ErrorMessage(const string& message)88void SubscriberHandler::ErrorMessage(const string& message)
@@ -92,9 +93,10 @@ void SubscriberHandler::ErrorMessage(const string& message) · 4 unmodified lines
92 93
93 status << "[" << m_name << "] " << message;94 status << "[" << m_name << "] " << message;
94 95
95 m_coutLock.lock();96 // Calls can come from multiple threads, so we impose a simple lock before write to console
97 s_coutLock.lock();
96 SubscriberInstance::ErrorMessage(status.str());98 SubscriberInstance::ErrorMessage(status.str());
97 m_coutLock.unlock();99 s_coutLock.unlock();
98}100}
99 101
100void SubscriberHandler::DataStartTime(time_t unixSOC, uint16_t milliseconds)102void SubscriberHandler::DataStartTime(time_t unixSOC, uint16_t milliseconds)
@@ -124,17 +126,15 @@ void SubscriberHandler::ParsedMetadata() · 23 unmodified lines
124// ReSharper disable CppDeclaratorNeverUsed126// ReSharper disable CppDeclaratorNeverUsed
125void SubscriberHandler::ReceivedNewMeasurements(const vector<MeasurementPtr>& measurements)127void SubscriberHandler::ReceivedNewMeasurements(const vector<MeasurementPtr>& measurements)
126{128{
129 // TODO: The following code could be used to generate frame based output, e.g., for IEEE C37.118
127 // Start processing measurements130 // Start processing measurements
128 //for (auto &measurement : measurements)131 //for (auto &measurement : measurements)
129 //{132 //{
130 // time_t soc;
131 // uint16_t milliseconds;
132
133 // // Get adjusted value133 // // Get adjusted value
134 // const float64_t value = measurement->AdjustedValue();134 // const float64_t value = measurement->AdjustedValue();
135 135
136 // // Get time converted to UNIX second of century plus milliseconds136 // // Get timestamp
137 // measurement->GetUnixTime(soc, milliseconds);137 // DateTime timestamp = measurement->GetDateTime();
138 138
139 // // Handle per measurement quality flags139 // // Handle per measurement quality flags
140 // int32_t qualityFlags = measurement->Flags;140 // int32_t qualityFlags = measurement->Flags;
@@ -152,7 +152,7 @@ void SubscriberHandler::ReceivedNewMeasurements(const vector<MeasurementPtr>& me · 11 unmodified lines
152 152
153 // // reference.Acronym << target device acronym 153 // // reference.Acronym << target device acronym
154 // // reference.Kind << kind of signal (see SignalKind in "Types.h"), like Frequency, Angle, etc154 // // reference.Kind << kind of signal (see SignalKind in "Types.h"), like Frequency, Angle, etc
155 // // reference.Index << for Phasors, Analogs and Digitals - this is the ordered "index"155 // // reference.Index << for Phasors, Analogs and Digitals - this is the ordered "index"
156 156
157 // // TODO: Handle measurement processing here...157 // // TODO: Handle measurement processing here...
158 // }158 // }
@@ -165,16 +165,11 @@ void SubscriberHandler::ReceivedNewMeasurements(const vector<MeasurementPtr>& me · 6 unmodified lines
165 //}165 //}
166 166
167 // TODO: *** Temporary Testing Code Below *** -- REMOVE BEFORE USE167 // TODO: *** Temporary Testing Code Below *** -- REMOVE BEFORE USE
168 const string TimestampFormat = "%Y-%m-%d %H:%M:%S.%f";168 static const uint64_t interval = 10 * 60;
169 const uint32_t MaxTimestampSize = 80;169 const uint64_t measurementCount = measurements.size();
170 const bool showMessage = (m_processCount + measurementCount >= (m_processCount / interval + 1) * interval);
170 171
171 static long processCount = 0;172 m_processCount += measurementCount;
172 static char timestamp[MaxTimestampSize];
173 static const long interval = 10 * 60;
174 const long measurementCount = measurements.size();
175 const bool showMessage = (processCount + measurementCount >= (processCount / interval + 1) * interval);
176
177 processCount += measurementCount;
178 173
179 // Only display messages every few seconds174 // Only display messages every few seconds
180 if (showMessage)175 if (showMessage)
@@ -182,12 +177,8 @@ void SubscriberHandler::ReceivedNewMeasurements(const vector<MeasurementPtr>& me · 1 unmodified line
182 stringstream message;177 stringstream message;
183 178
184 message << GetTotalMeasurementsReceived() << " measurements received so far..." << endl;179 message << GetTotalMeasurementsReceived() << " measurements received so far..." << endl;
185 180 message << ToString(measurements[0]->GetDateTime()) << endl;
186 if (TicksToString(timestamp, MaxTimestampSize, TimestampFormat, measurements[0]->Timestamp))181 message << "Signal ID: " << ToString(measurements[0]->SignalID) << endl;
187 message << string(timestamp) << endl;
188
189 message << "Signal ID: " << boost::lexical_cast<string>(measurements[0]->SignalID) << endl;
190
191 message << "\tPoint\tValue" << endl;182 message << "\tPoint\tValue" << endl;
192 183
193 for (const auto& measurement : measurements)184 for (const auto& measurement : measurements)

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t