gov.sandia.ccaffeine.dc.distributed
Class HeartbeatMonitor

java.lang.Object
  extended by gov.sandia.ccaffeine.dc.distributed.HeartbeatMonitor
All Implemented Interfaces:
HeartbeatListener, java.awt.event.ActionListener, java.util.EventListener

public class HeartbeatMonitor
extends java.lang.Object
implements java.awt.event.ActionListener, HeartbeatListener

This class listens for the arrival of heartbeats. If no heartbeat is received within a reasonable amount of time then a HeartbeatEvent is sent to every HeartbeatListener.

This class can be used by a server to monitor its connection to a client. The client can periodically sending heartbeats to the server. When the client dies or is disconnected then the client can no longer send heartbeats to the server. This client monitors the amount of time between heartbeats. If a long amount of time passes without a heartbeat then the server can be notified that the client has lost its connection to the server.

SAMPLE CODE:
HeartbeatMonitor heartbeatMonitor = new HeartbeatMonitor();
heartbeatMonitor.setNumberOfMillisecondsToWaitForHeartbeat(5000);
heartbeatMonitor.addHeartbeatListener(this);
heartbeatMonitor.start();
: this.heartbeatMonitor.receivedHeartbeat
    (new HeartbeatEvent(this));
: public void didNotReceiveHeartbeat(HeartbeatEvent event) {
    System.out.println("did not recieve heartbeat");
}


Field Summary
protected  int numberOfMillisecondsToWaitForHeartbeat
           
protected  javax.swing.Timer timer
           
 
Constructor Summary
HeartbeatMonitor()
           
 
Method Summary
 void actionPerformed(java.awt.event.ActionEvent event)
          It has been a very long time since the arrival of the last heartbeat.
 void addHeartbeatListener(HeartbeatListener listener)
          Register a Heartbeat Listener.
protected  void broadcastDidNotReceiveHeartbeatEvent(HeartbeatEvent event)
          Tell all registered Heartbeat listeners that it has been a very long time since the last heartbeat arrived.
 void broadcastDidNotRecevieHeartbeatEvent()
          Tell all registered Heartbeat listeners that it has been a very long time since the last heartbeat arrived.
protected  void broadcastReceivedHeartbeatEvent(HeartbeatEvent event)
          Tell all registered Heartbeat listeners that a heartbeat arrived.
 void broadcastReceviedHeartbeatEvent()
          Tell all registered Heartbeat listeners that a heartbeat arrived.
 void didNotReceiveHeartbeat(HeartbeatEvent event)
          Call this method whenever you want to notify this class that you did NOT receive a heartbeat.
 int getNumberOfMillisecondsToWaitForHeartbeat()
          Retrieve the number of milliseconds that we will wait for a heartbeat.
 void receivedHeartbeat(HeartbeatEvent event)
          Call this method whenever you want to notify this class that you received a heartbeat.
 void removeHeartbeatListener(HeartbeatListener listener)
          Unregister a Heartbeat Listener.
 void setNumberOfMillisecondsToWaitForHeartbeat(int numberOfMillisecondsToWaitForHeartbeat)
          Set the number of milliseconds that we will wait for a heartbeat.
 void start()
          Start monitoring the arrival of heartbeats.
 void stop()
          Stop monitoring the arrival of heartbeats.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

timer

protected javax.swing.Timer timer

numberOfMillisecondsToWaitForHeartbeat

protected int numberOfMillisecondsToWaitForHeartbeat
Constructor Detail

HeartbeatMonitor

public HeartbeatMonitor()
Method Detail

getNumberOfMillisecondsToWaitForHeartbeat

public int getNumberOfMillisecondsToWaitForHeartbeat()
Retrieve the number of milliseconds that we will wait for a heartbeat. A return value of 0 indicates that we will wait forever. If no heartbeat is received within this amount of millseconds then a HeartbeatEvent is sent to all HeartbeatListeners.

Returns:
The number of milliseconds we will wait for the arrival of a heartbeat.

setNumberOfMillisecondsToWaitForHeartbeat

public void setNumberOfMillisecondsToWaitForHeartbeat(int numberOfMillisecondsToWaitForHeartbeat)
Set the number of milliseconds that we will wait for a heartbeat. A value of 0 indicates that we will wait forever. If no heartbeat is received within this amount of millseconds then a HeartbeatEvent is sent to all HeartbeatListeners.

Parameters:
numberOfMillisecondsToWaitForHeartbeat - The number of milliseconds we will wait for the arrival of a heartbeat.

receivedHeartbeat

public void receivedHeartbeat(HeartbeatEvent event)
Call this method whenever you want to notify this class that you received a heartbeat.

Specified by:
receivedHeartbeat in interface HeartbeatListener

didNotReceiveHeartbeat

public void didNotReceiveHeartbeat(HeartbeatEvent event)
Call this method whenever you want to notify this class that you did NOT receive a heartbeat.

Specified by:
didNotReceiveHeartbeat in interface HeartbeatListener

start

public void start()
Start monitoring the arrival of heartbeats. If a heartbeat does not arrive before the timeout period then send a DidNotReceiveHeartbeatEvent to all DidNotReceiveHeartbeatListeners.


stop

public void stop()
Stop monitoring the arrival of heartbeats. If a heartbeat does not arrive before the timeout period then do NOT send a DidNotReceiveHeartbeatEvent to all DidNotReceiveHeartbeatListeners.


actionPerformed

public void actionPerformed(java.awt.event.ActionEvent event)
It has been a very long time since the arrival of the last heartbeat. Send a HeartbeatEvent to every registered Heartbeat Listener.

Specified by:
actionPerformed in interface java.awt.event.ActionListener
Parameters:
event -

addHeartbeatListener

public void addHeartbeatListener(HeartbeatListener listener)
Register a Heartbeat Listener. Whenever this class receives a heartbeat then all Heartbeat Listeners will be notified. Whenever a very long time passes without the arrival of a heartbeat then all Heartbeat listeners will be notified.

Parameters:
listener - The Heartbeat Listener that wants to be notified whenever this class recieves a heartbeat or when a very long time passes without the arrival of a heartbeat.

removeHeartbeatListener

public void removeHeartbeatListener(HeartbeatListener listener)
Unregister a Heartbeat Listener. Whenever this class receives a heartbeat then do NOT notify this class. Whenever a very long time passes without the arrival of a heartbeat then do NOT notify this class.

Parameters:
listener - The Heartbeat Listener that no longer wants to be notified whenever this class recieves a heartbeat or when a very long time passes without the arrival of a heartbeat.

broadcastReceviedHeartbeatEvent

public void broadcastReceviedHeartbeatEvent()
Tell all registered Heartbeat listeners that a heartbeat arrived.


broadcastReceivedHeartbeatEvent

protected void broadcastReceivedHeartbeatEvent(HeartbeatEvent event)
Tell all registered Heartbeat listeners that a heartbeat arrived.

Parameters:
event - The event that is generated whenever a heartbeat arrives

broadcastDidNotRecevieHeartbeatEvent

public void broadcastDidNotRecevieHeartbeatEvent()
Tell all registered Heartbeat listeners that it has been a very long time since the last heartbeat arrived.

Parameters:
event - The event that is generated whenever a heartbeat does NOT arrive for a very long time.

broadcastDidNotReceiveHeartbeatEvent

protected void broadcastDidNotReceiveHeartbeatEvent(HeartbeatEvent event)
Tell all registered Heartbeat listeners that it has been a very long time since the last heartbeat arrived.

Parameters:
event - The event that is generated whenever a heartbeat does NOT arrive for a very long time.