Showing the changes to Source/Libraries/TimeSeriesPlatformLibrary/Samples/AdvancedPublish.cpp (1 of 13 files). Show all
Unified · Split
| @@ -48,8 +48,9 @@ void DisplayClientConnected(DataPublisher* source, const SubscriberConnectionPtr · 47 unmodified lines | ||
| 48 | 48 | void DisplayClientDisconnected(DataPublisher* source, const SubscriberConnectionPtr& connection); |
| 49 | 49 | void DisplayStatusMessage(DataPublisher* source, const string& message); |
| 50 | 50 | void DisplayErrorMessage(DataPublisher* source, const string& message); |
| 51 | −void HandleTemporalSubscriptionRequested(DataPublisher* source, const SubscriberConnectionPtr& connection); | |
| 52 | −void HandleProcessingIntervalChangeRequested(DataPublisher* source, const SubscriberConnectionPtr& connection); | |
| 51 | +void HandleTemporalSubscriptionRequested(DataPublisher* source, const TemporalSubscriberConnectionPtr& connection); | |
| 52 | +void HandleTemporalProcessingIntervalChangeRequested(DataPublisher* source, const TemporalSubscriberConnectionPtr& connection); | |
| 53 | +void HandleTemporalSubscriptionCanceled(DataPublisher* source, const TemporalSubscriberConnectionPtr& connection); | |
| 53 | 54 | |
| 54 | 55 | void LoadMetadataToPublish(vector<DeviceMetadataPtr>& deviceMetadata, vector<MeasurementMetadataPtr>& measurementMetadata, vector<PhasorMetadataPtr>& phasorMetadata) |
| 55 | 56 | { |
| @@ -222,7 +223,8 @@ bool RunPublisher(uint16_t port, bool genHistory) · 166 unmodified lines | ||
| 222 | 223 | Publisher->RegisterStatusMessageCallback(&DisplayStatusMessage); |
| 223 | 224 | Publisher->RegisterErrorMessageCallback(&DisplayErrorMessage); |
| 224 | 225 | Publisher->RegisterTemporalSubscriptionRequestedCallback(&HandleTemporalSubscriptionRequested); |
| 225 | − Publisher->RegisterProcessingIntervalChangeRequestedCallback(&HandleProcessingIntervalChangeRequested); | |
| 226 | + Publisher->RegisterTemporalProcessingIntervalChangeRequestedCallback(&HandleTemporalProcessingIntervalChangeRequested); | |
| 227 | + Publisher->RegisterTemporalSubscriptionCanceledCallback(&HandleTemporalSubscriptionCanceled); | |
| 226 | 228 | |
| 227 | 229 | // Enable temporal subscription support - this allows historical data requests as well as real-time |
| 228 | 230 | Publisher->SetSupportsTemporalSubscriptions(true); |
| @@ -333,28 +335,18 @@ void DisplayErrorMessage(DataPublisher* source, const string& message) · 104 unmodified lines | ||
| 333 | 335 | cerr << message << endl << endl; |
| 334 | 336 | } |
| 335 | 337 | |
| 336 | −void HandleTemporalSubscriptionRequested(DataPublisher* source, const SubscriberConnectionPtr& connection) | |
| 338 | +void HandleTemporalSubscriptionRequested(DataPublisher* source, const TemporalSubscriberConnectionPtr& connection) | |
| 337 | 339 | { |
| 338 | 340 | cout << "Client \"" << connection->GetConnectionID() << "\" with subscriber ID " << ToString(connection->GetSubscriberID()) << " has requested a temporal subscription starting at " << ToString(connection->GetStartTimeConstraint()) << endl << endl; |
| 339 | 341 | |
| 340 | − TemporalSubscriberPtr temporalSubscription = NewSharedPtr<TemporalSubscriber>(connection, [](const GSF::Guid& instanceID) | |
| 341 | − { | |
| 342 | − Thread([instanceID]{ | |
| 343 | − TemporalSubscriptionsLock.lock(); | |
| 344 | − | |
| 345 | − if (TemporalSubscriptions.find(instanceID) != TemporalSubscriptions.end()) | |
| 346 | − TemporalSubscriptions.erase(instanceID); | |
| 347 | − | |
| 348 | − TemporalSubscriptionsLock.unlock(); | |
| 349 | − }); | |
| 350 | − }); | |
| 342 | + TemporalSubscriberPtr temporalSubscription = NewSharedPtr<TemporalSubscriber>(connection); | |
| 351 | 343 | |
| 352 | 344 | TemporalSubscriptionsLock.lock(); |
| 353 | 345 | TemporalSubscriptions.insert_or_assign(connection->GetInstanceID(), temporalSubscription); |
| 354 | 346 | TemporalSubscriptionsLock.unlock(); |
| 355 | 347 | } |
| 356 | 348 | |
| 357 | −void HandleProcessingIntervalChangeRequested(DataPublisher* source, const SubscriberConnectionPtr& connection) | |
| 349 | +void HandleTemporalProcessingIntervalChangeRequested(DataPublisher* source, const TemporalSubscriberConnectionPtr& connection) | |
| 358 | 350 | { |
| 359 | 351 | static const TemporalSubscriberPtr nullTemporalSubscription = nullptr; |
| 360 | 352 | const GSF::Guid& instanceID = connection->GetInstanceID(); |
| @@ -371,3 +363,17 @@ void HandleProcessingIntervalChangeRequested(DataPublisher* source, const Subscr · 10 unmodified lines | ||
| 371 | 363 | if (temporalSubscription != nullTemporalSubscription) |
| 372 | 364 | cout << "Client \"" << connection->GetConnectionID() << "\" with subscriber ID " << ToString(connection->GetSubscriberID()) << " has requested to change its temporal processing interval to " << ToString(processingInterval) << "ms" << endl << endl; |
| 373 | 365 | } |
| 366 | + | |
| 367 | +void HandleTemporalSubscriptionCanceled(DataPublisher* source, const TemporalSubscriberConnectionPtr& connection) | |
| 368 | +{ | |
| 369 | + const GSF::Guid& instanceID = connection->GetInstanceID(); | |
| 370 | + | |
| 371 | + Thread([instanceID]{ | |
| 372 | + TemporalSubscriptionsLock.lock(); | |
| 373 | + | |
| 374 | + if (TemporalSubscriptions.find(instanceID) != TemporalSubscriptions.end()) | |
| 375 | + TemporalSubscriptions.erase(instanceID); | |
| 376 | + | |
| 377 | + TemporalSubscriptionsLock.unlock(); | |
| 378 | + }); | |
| 379 | +} | |