protected virtual uint CalculateKeepAliveCount(double publishingInterval, uint keepAliveCount)
{
// set default.
if (keepAliveCount == 0)
{
keepAliveCount = 3;
}
double keepAliveInterval = keepAliveCount*publishingInterval;
// keep alive interval cannot be longer than the max subscription lifetime.
if (keepAliveInterval > m_maxSubscriptionLifetime)
{
keepAliveCount = (uint)(m_maxSubscriptionLifetime/publishingInterval);
if (keepAliveCount < UInt32.MaxValue)
{
if (m_maxSubscriptionLifetime%publishingInterval != 0)
{
keepAliveCount++;
}
}
keepAliveInterval = keepAliveCount*publishingInterval;
}
// the time between publishes cannot exceed the max publishing interval.
if (keepAliveInterval > m_maxPublishingInterval)
{
keepAliveCount = (uint)(m_maxPublishingInterval/publishingInterval);
if (keepAliveCount < UInt32.MaxValue)
{
if (m_maxPublishingInterval % publishingInterval != 0)
{
keepAliveCount++;
}
}
}
return keepAliveCount;
}