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 { | |
/** The amount of time this timer waits before generating a wake-up event. */ | |
private long _sleepTime; | |
/** The gossip member this timer is for. */ | |
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)); | |
} | |
} | |