/// <summary> /// Interface method used by clients /// </summary> /// <param name="clientId">Calling clients' ID</param> public void Heartbeat(Guid clientId) { if (clientId == Guid.Empty) { return; } Debug.WriteLine("Received heartbeat from {0}", clientId); if (HeartbeatMonitorList.Contains(clientId)) { HeartbeatMonitorList.Remove(clientId); } Storage.SubscriberSeen(clientId); }
/// <summary> /// Send heartbeat messages to clients we haven't seen in a while /// </summary> void SendHeartBeat() { lock (lockHandle) { foreach (Subscriber sub in Storage.GetUnseenSubscribersSince(DateTime.Now - CheckHeartbeatAfter)) { if (HeartbeatMonitorList.Contains(sub.SubscriberId)) { SubscriberTimedOut(sub); } else { SendHeartBeat(sub); } } } }