public NotificationMessage Publish(
OperationContext context,
out UInt32Collection availableSequenceNumbers,
out bool moreNotifications)
{
if (context == null) throw new ArgumentNullException("context");
NotificationMessage message = null;
lock (m_lock)
{
moreNotifications = false;
availableSequenceNumbers = null;
// check if expired.
if (m_expired)
{
return null;
}
try
{
// update diagnostics.
lock (m_diagnostics)
{
m_diagnostics.PublishRequestCount++;
}
message = InnerPublish(context, out availableSequenceNumbers, out moreNotifications);
lock (m_diagnostics)
{
m_diagnostics.UnacknowledgedMessageCount = (uint)availableSequenceNumbers.Count;
}
}
finally
{
// clear counters on success.
if (message != null)
{
// TraceState(Utils.Format("PUBLISH #{0}", message.SequenceNumber));
ResetKeepaliveCount();
m_waitingForPublish = moreNotifications;
ResetLifetimeCount();
}
}
}
return message;
}