void SendHeartbeat(object state)
{
var currentStatus = Interlocked.CompareExchange(ref status, 0, 0);
if (currentStatus != Status.Started)
return;
if (DateTime.UtcNow - new DateTime(lastHeartbeatTicks) < HeartbeatInterval.Value)
return;
if (OnHeartbeatSent != null)
OnHeartbeatSent();
NotifyAllSubscribers(ControlCommand.Pulse);
if (DateTime.UtcNow - new DateTime(lastHeartbeatTicks) > HeartbeatTimeout)
{
currentStatus = Interlocked.CompareExchange(ref status, 0, 0);
if (currentStatus == Status.Started)
{
Restart();
}
}
}