private bool ModifySubscription(Subscription subscription, double publishingInterval)
{
try
{
double revisedPublishingInterval;
uint revisedLifetimeCount;
uint revisedKeepAliveCount;
RequestHeader requestHeader = new RequestHeader();
requestHeader.ReturnDiagnostics = 0;
DateTime start = DateTime.UtcNow;
ResponseHeader responseHeader = Session.ModifySubscription(
requestHeader,
subscription.SubscriptionId,
publishingInterval,
subscription.LifetimeCount,
subscription.KeepAliveCount,
subscription.MaxNotificationsPerPublish,
subscription.Priority,
out revisedPublishingInterval,
out revisedLifetimeCount,
out revisedKeepAliveCount);
double elapsedTime = (DateTime.UtcNow - start).TotalMilliseconds;
if (elapsedTime > 300)
{
Log("WARNING: ModifySubscription took {0}ms. Timing errors may occur.", (DateTime.UtcNow - start).TotalMilliseconds);
}
PublishingState state = new PublishingState();
state.KeepAliveCount = revisedKeepAliveCount;
state.PublishingInterval = revisedPublishingInterval;
state.Start = responseHeader.Timestamp;
state.KeepAliveMode = true;
lock (subscription)
{
subscription.PublishingInterval = revisedPublishingInterval;
subscription.KeepAliveCount = revisedKeepAliveCount;
subscription.LifetimeCount = revisedLifetimeCount;
subscription.States[subscription.States.Count-1].End = state.Start;
subscription.States.Add(state);
}
return true;
}
catch (Exception e)
{
Log(e, "Error modifying state of subscription {0}.", subscription.SubscriptionId);
return false;
}
}