History

TimeSeriesPlatformLibrary: Added temporal support options to DataPublisher interfaces.

J. Ritchie Carroll committed 7 years ago

Commit 5c5b4061 parent 04505f228 files · +603 −300Browse files

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

Unified · Split

5 files
  1. Source/Libraries/TimeSeriesPlatformLibrary/Samples/AdvancedPublish.cpp +35 −11
  2. Source/Libraries/TimeSeriesPlatformLibrary/Samples/FilterExpressionTests.cpp +9 −9
  3. Source/Libraries/TimeSeriesPlatformLibrary/Samples/SimplePublish.cpp +9 −9
  4. Source/Libraries/TimeSeriesPlatformLibrary/Samples/SubscriberHandler.cpp +1 −1
  5. Source/Libraries/TimeSeriesPlatformLibrary/Samples/SubscriberHandler.h +1 −1
Source/Libraries/TimeSeriesPlatformLibrary/Samples/AdvancedPublish.cpp+35−11
@@ -33,21 +33,23 @@ using namespace GSF::TimeSeries::Transport; · 32 unmodified lines
3333 using namespace GSF::FilterExpressions;
3434
3535 DataPublisherPtr Publisher;
36−TimerPtr PublishTimer;
36+TimerPtr PublishTimer, CompletionTimer;
3737 vector<DeviceMetadataPtr> DevicesToPublish;
3838 vector<MeasurementMetadataPtr> MeasurementsToPublish;
3939 vector<PhasorMetadataPtr> PhasorsToPublish;
4040
4141 bool RunPublisher(uint16_t port);
42−void DisplayClientConnected(DataPublisher* source, const Guid& subscriberID, const string& connectionID);
43−void DisplayClientDisconnected(DataPublisher* source, const Guid& subscriberID, const string& connectionID);
42+void DisplayClientConnected(DataPublisher* source, const SubscriberConnectionPtr& connection);
43+void DisplayClientDisconnected(DataPublisher* source, const SubscriberConnectionPtr& connection);
4444 void DisplayStatusMessage(DataPublisher* source, const string& message);
4545 void DisplayErrorMessage(DataPublisher* source, const string& message);
46+void HandleTemporalSubscriptionRequested(DataPublisher* source, const SubscriberConnectionPtr& connection);
47+void HandleTemporalProcessingIntervalChangeRequested(DataPublisher* source, const SubscriberConnectionPtr& connection);
4648
4749 void LoadMetadataToPublish(vector<DeviceMetadataPtr>& deviceMetadata, vector<MeasurementMetadataPtr>& measurementMetadata, vector<PhasorMetadataPtr>& phasorMetadata)
4850 {
4951 DeviceMetadataPtr device1Metadata = NewSharedPtr<DeviceMetadata>();
50− const DateTime timestamp = UtcNow();
52+ const datetime_t timestamp = UtcNow();
5153
5254 // Add a device
5355 device1Metadata->Name = "Test PMU";
@@ -210,6 +212,11 @@ bool RunPublisher(uint16_t port) · 156 unmodified lines
210212 Publisher->RegisterClientDisconnectedCallback(&DisplayClientDisconnected);
211213 Publisher->RegisterStatusMessageCallback(&DisplayStatusMessage);
212214 Publisher->RegisterErrorMessageCallback(&DisplayErrorMessage);
215+ Publisher->RegisterTemporalSubscriptionRequestedCallback(&HandleTemporalSubscriptionRequested);
216+ Publisher->RegisterTemporalProcessingIntervalChangeRequestedCallback(&HandleTemporalProcessingIntervalChangeRequested);
217+
218+ // Enable temporal subscription support
219+ Publisher->SetSupportsTemporalSubscriptions(true);
213220
214221 // Load metadata to be used for publication
215222 LoadMetadataToPublish(DevicesToPublish, MeasurementsToPublish, PhasorsToPublish);
@@ -285,18 +292,18 @@ bool RunPublisher(uint16_t port) · 69 unmodified lines
285292 return running;
286293 }
287294
288−void DisplayClientConnected(DataPublisher* source, const Guid& subscriberID, const string& connectionID)
295+void DisplayClientConnected(DataPublisher* source, const SubscriberConnectionPtr& connection)
289296 {
290297 cout << ">> New Client Connected:" << endl;
291− cout << " Subscriber ID: " << ToString(subscriberID) << endl;
292− cout << " Connection ID: " << connectionID << endl << endl;
298+ cout << " Subscriber ID: " << ToString(connection->GetSubscriberID()) << endl;
299+ cout << " Connection ID: " << ToString(connection->GetConnectionID()) << endl << endl;
293300 }
294301
295−void DisplayClientDisconnected(DataPublisher* source, const Guid& subscriberID, const string& connectionID)
302+void DisplayClientDisconnected(DataPublisher* source, const SubscriberConnectionPtr& connection)
296303 {
297304 cout << ">> Client Disconnected:" << endl;
298− cout << " Subscriber ID: " << ToString(subscriberID) << endl;
299− cout << " Connection ID: " << connectionID << endl << endl;
305+ cout << " Subscriber ID: " << ToString(connection->GetSubscriberID()) << endl;
306+ cout << " Connection ID: " << ToString(connection->GetConnectionID()) << endl << endl;
300307 }
301308
302309 // Callback which is called to display status messages from the subscriber.
@@ -309,4 +316,21 @@ void DisplayStatusMessage(DataPublisher* source, const string& message) · 6 unmodified lines
309316 void DisplayErrorMessage(DataPublisher* source, const string& message)
310317 {
311318 cerr << message << endl << endl;
312−}
319+}
320+
321+void HandleTemporalSubscriptionRequested(DataPublisher* source, const SubscriberConnectionPtr& connection)
322+{
323+ cout << "Client \"" << connection->GetConnectionID() << "\" with subscriber ID " << ToString(connection->GetSubscriberID()) << " has requested a temporal subscription starting at " << ToString(connection->GetStartTimeConstraint()) << endl << endl;
324+
325+ CompletionTimer = NewSharedPtr<Timer>(1000, [connection](Timer*, void*)
326+ {
327+ connection->CompleteTemporalSubscription();
328+ });
329+
330+ CompletionTimer->Start();
331+}
332+
333+void HandleTemporalProcessingIntervalChangeRequested(DataPublisher* source, const SubscriberConnectionPtr& connection)
334+{
335+ cout << "Client \"" << connection->GetConnectionID() << "\" with subscriber ID " << ToString(connection->GetSubscriberID()) << " has requested to change its temporal processing interval to " << ToString(connection->GetProcessingInterval()) << "ms" << endl << endl;
336+}
Source/Libraries/TimeSeriesPlatformLibrary/Samples/FilterExpressionTests.cpp+9−9
@@ -1177,42 +1177,42 @@ int main(int argc, char* argv[]) · 1176 unmodified lines
11771177 valueExpression = FilterExpressionParser::Evaluate(dataRow, "DateAdd('2019-02-04', 2, 'Month')");
11781178
11791179 assert(valueExpression->ValueType == ExpressionValueType::DateTime);
1180− assert(valueExpression->ValueAsDateTime() == DateTime(date(2019, 4, 4)));
1180+ assert(valueExpression->ValueAsDateTime() == datetime_t(date(2019, 4, 4)));
11811181 cout << "Test " << ++test << " succeeded..." << endl;
11821182
11831183 // Test 119
11841184 valueExpression = FilterExpressionParser::Evaluate(dataRow, "DateAdd(#1/31/2019#, 1, 'Day')");
11851185
11861186 assert(valueExpression->ValueType == ExpressionValueType::DateTime);
1187− assert(valueExpression->ValueAsDateTime() == DateTime(date(2019, 2, 1)));
1187+ assert(valueExpression->ValueAsDateTime() == datetime_t(date(2019, 2, 1)));
11881188 cout << "Test " << ++test << " succeeded..." << endl;
11891189
11901190 // Test 120
11911191 valueExpression = FilterExpressionParser::Evaluate(dataRow, "DateAdd(#2019-01-31#, 2, 'Week')");
11921192
11931193 assert(valueExpression->ValueType == ExpressionValueType::DateTime);
1194− assert(valueExpression->ValueAsDateTime() == DateTime(date(2019, 2, 14)));
1194+ assert(valueExpression->ValueAsDateTime() == datetime_t(date(2019, 2, 14)));
11951195 cout << "Test " << ++test << " succeeded..." << endl;
11961196
11971197 // Test 121
11981198 valueExpression = FilterExpressionParser::Evaluate(dataRow, "DateAdd(#2019-01-31#, 25, 'Hour')");
11991199
12001200 assert(valueExpression->ValueType == ExpressionValueType::DateTime);
1201− assert(valueExpression->ValueAsDateTime() == DateTime(date(2019, 2, 1), time_duration(1, 0, 0)));
1201+ assert(valueExpression->ValueAsDateTime() == datetime_t(date(2019, 2, 1), time_duration(1, 0, 0)));
12021202 cout << "Test " << ++test << " succeeded..." << endl;
12031203
12041204 // Test 122
12051205 valueExpression = FilterExpressionParser::Evaluate(dataRow, "DateAdd(#2018-12-31 23:58#, 3, 'Minute')");
12061206
12071207 assert(valueExpression->ValueType == ExpressionValueType::DateTime);
1208− assert(valueExpression->ValueAsDateTime() == DateTime(date(2019, 1, 1), time_duration(0, 1, 0)));
1208+ assert(valueExpression->ValueAsDateTime() == datetime_t(date(2019, 1, 1), time_duration(0, 1, 0)));
12091209 cout << "Test " << ++test << " succeeded..." << endl;
12101210
12111211 // Test 123
12121212 valueExpression = FilterExpressionParser::Evaluate(dataRow, "DateAdd('2019-01-1 00:59', 61, 'Second')");
12131213
12141214 assert(valueExpression->ValueType == ExpressionValueType::DateTime);
1215− assert(valueExpression->ValueAsDateTime() == DateTime(date(2019, 1, 1), time_duration(1, 0, 1)));
1215+ assert(valueExpression->ValueAsDateTime() == datetime_t(date(2019, 1, 1), time_duration(1, 0, 1)));
12161216 cout << "Test " << ++test << " succeeded..." << endl;
12171217
12181218 const float64_t baseFraction = pow(10.0, time_duration::num_fractional_digits());
@@ -1222,14 +1222,14 @@ int main(int argc, char* argv[]) · 3 unmodified lines
12221222 valueExpression = FilterExpressionParser::Evaluate(dataRow, "DateAdd('2019-01-1 00:00:59.999', 2, 'Millisecond')");
12231223
12241224 assert(valueExpression->ValueType == ExpressionValueType::DateTime);
1225− assert(valueExpression->ValueAsDateTime() == DateTime(date(2019, 1, 1), time_duration(0, 1, 0, fracSecond(1))));
1225+ assert(valueExpression->ValueAsDateTime() == datetime_t(date(2019, 1, 1), time_duration(0, 1, 0, fracSecond(1))));
12261226 cout << "Test " << ++test << " succeeded..." << endl;
12271227
12281228 // Test 125
12291229 valueExpression = FilterExpressionParser::Evaluate(dataRow, "DateAdd(#1/1/2019 0:0:1.029#, -FramesPerSecond, 'Millisecond')");
12301230
12311231 assert(valueExpression->ValueType == ExpressionValueType::DateTime);
1232− assert(valueExpression->ValueAsDateTime() == DateTime(date(2019, 1, 1), time_duration(0, 0, 0, fracSecond(999))));
1232+ assert(valueExpression->ValueAsDateTime() == datetime_t(date(2019, 1, 1), time_duration(0, 0, 0, fracSecond(999))));
12331233 cout << "Test " << ++test << " succeeded..." << endl;
12341234
12351235 // Test 126
@@ -1429,7 +1429,7 @@ int main(int argc, char* argv[]) · 193 unmodified lines
14291429 cout << "Test " << ++test << " succeeded..." << endl;
14301430
14311431 // Test 150
1432− const DateTime time = ParseTimestamp("2019-02-10T15:55:25.090477Z");
1432+ const datetime_t time = ParseTimestamp("2019-02-10T15:55:25.090477Z");
14331433 const int64_t ticks = ToTicks(time);
14341434
14351435 assert(ticks == 636854109250904770L);
Source/Libraries/TimeSeriesPlatformLibrary/Samples/SimplePublish.cpp+9−9
@@ -36,8 +36,8 @@ TimerPtr PublishTimer; · 35 unmodified lines
3636 vector<MeasurementMetadataPtr> MeasurementsToPublish;
3737
3838 bool RunPublisher(uint16_t port);
39−void DisplayClientConnected(DataPublisher* source, const Guid& subscriberID, const string& connectionID);
40−void DisplayClientDisconnected(DataPublisher* source, const Guid& subscriberID, const string& connectionID);
39+void DisplayClientConnected(DataPublisher* source, const SubscriberConnectionPtr& connection);
40+void DisplayClientDisconnected(DataPublisher* source, const SubscriberConnectionPtr& connection);
4141 void DisplayStatusMessage(DataPublisher* source, const string& message);
4242 void DisplayErrorMessage(DataPublisher* source, const string& message);
4343
@@ -168,18 +168,18 @@ bool RunPublisher(uint16_t port) · 124 unmodified lines
168168 return running;
169169 }
170170
171−void DisplayClientConnected(DataPublisher* source, const Guid& subscriberID, const string& connectionID)
171+void DisplayClientConnected(DataPublisher* source, const SubscriberConnectionPtr& connection)
172172 {
173173 cout << ">> New Client Connected:" << endl;
174− cout << " Subscriber ID: " << ToString(subscriberID) << endl;
175− cout << " Connection ID: " << connectionID << endl << endl;
174+ cout << " Subscriber ID: " << ToString(connection->GetSubscriberID()) << endl;
175+ cout << " Connection ID: " << ToString(connection->GetConnectionID()) << endl << endl;
176176 }
177177
178−void DisplayClientDisconnected(DataPublisher* source, const Guid& subscriberID, const string& connectionID)
178+void DisplayClientDisconnected(DataPublisher* source, const SubscriberConnectionPtr& connection)
179179 {
180180 cout << ">> Client Disconnected:" << endl;
181− cout << " Subscriber ID: " << ToString(subscriberID) << endl;
182− cout << " Connection ID: " << connectionID << endl << endl;
181+ cout << " Subscriber ID: " << ToString(connection->GetSubscriberID()) << endl;
182+ cout << " Connection ID: " << ToString(connection->GetConnectionID()) << endl << endl;
183183 }
184184
185185 // Callback which is called to display status messages from the subscriber.
@@ -192,4 +192,4 @@ void DisplayStatusMessage(DataPublisher* source, const string& message) · 6 unmodified lines
192192 void DisplayErrorMessage(DataPublisher* source, const string& message)
193193 {
194194 cerr << message << endl << endl;
195−}
195+}
Source/Libraries/TimeSeriesPlatformLibrary/Samples/SubscriberHandler.cpp+1−1
@@ -104,7 +104,7 @@ void SubscriberHandler::DataStartTime(time_t unixSOC, uint16_t milliseconds) · 103 unmodified lines
104104 // TODO: This reports timestamp, time_t format, of very first received measurement (if useful)
105105 }
106106
107−void SubscriberHandler::DataStartTime(DateTime startTime)
107+void SubscriberHandler::DataStartTime(datetime_t startTime)
108108 {
109109 // TODO: This reports timestamp, ptime format, of very first received measurement (if useful)
110110 }
Source/Libraries/TimeSeriesPlatformLibrary/Samples/SubscriberHandler.h+1−1
@@ -41,7 +41,7 @@ protected: · 40 unmodified lines
4141 void StatusMessage(const std::string& message) override;
4242 void ErrorMessage(const std::string& message) override;
4343 void DataStartTime(time_t unixSOC, uint16_t milliseconds) override;
44− void DataStartTime(GSF::DateTime startTime) override;
44+ void DataStartTime(GSF::datetime_t startTime) override;
4545 void ReceivedMetadata(const std::vector<uint8_t>& payload) override;
4646 void ReceivedNewMeasurements(const std::vector<GSF::TimeSeries::MeasurementPtr>& measurements) override;
4747 void ParsedMetadata() override;

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