blob: c3613fbbe452dda126ded1b9e91bcb11a0fdd3d7 [file] [log] [blame]
package com.google.code.gossip;
import java.util.Date;
import javax.management.NotificationListener;
import javax.management.timer.Timer;
/**
* This object represents a timer for a gossip member. When the timer has elapsed without being
* reset in the meantime, it will inform the GossipService about this who in turn will put the
* gossip member on the dead list, because it is apparantly not alive anymore.
*
* @author joshclemm, harmenw
*/
public class GossipTimeoutTimer extends Timer {
private long _sleepTime;
private LocalGossipMember _source;
/**
* Constructor. Creates a reset-able timer that wakes up after millisecondsSleepTime.
*
* @param millisecondsSleepTime
* The time for this timer to wait before an event.
* @param service
* @param member
*/
public GossipTimeoutTimer(long millisecondsSleepTime, NotificationListener notificationListener,
LocalGossipMember member) {
super();
_sleepTime = millisecondsSleepTime;
_source = member;
addNotificationListener(notificationListener, null, null);
}
/**
* @see javax.management.timer.Timer#start()
*/
public void start() {
this.reset();
super.start();
}
/**
* Resets timer to start counting down from original time.
*/
public void reset() {
removeAllNotifications();
setWakeupTime(_sleepTime);
}
/**
* Adds a new wake-up time for this timer.
*
* @param milliseconds
*/
private void setWakeupTime(long milliseconds) {
addNotification("type", "message", _source, new Date(System.currentTimeMillis() + milliseconds));
}
}