package ibis.ipl.registry.central; import ibis.ipl.impl.IbisIdentifier; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import java.io.Serializable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public final class Member implements Serializable { private static final long serialVersionUID = 1L; private static final Logger logger = LoggerFactory.getLogger(Member.class); private final IbisIdentifier ibis; private final Event event; private int currentEventTime; // field used to keep track of when this member was last seen (server), // or when it was last reported to be dead (client) private long time; public Member(IbisIdentifier ibis, Event event) { this.ibis = ibis; this.event = event; currentEventTime = 0; time = 0; } public Member(DataInput in) throws IOException { ibis = new IbisIdentifier(in); event = new Event(in); currentEventTime = 0; time = 0; } public void writeTo(DataOutput out) throws IOException { ibis.writeTo(out); event.writeTo(out); } public IbisIdentifier getIbis() { return ibis; } public synchronized int getCurrentTime() { return currentEventTime; } public synchronized void setCurrentTime(int currentTime) { if (currentTime < this.currentEventTime) { logger.error( "tried to set time backwards on member. Current time = " + this.currentEventTime + " new time = " + currentTime, new Exception()); return; } this.currentEventTime = currentTime; } public synchronized void updateTime() { time = System.currentTimeMillis(); } public synchronized void clearTime() { time = 0; } public synchronized long getTime() { return time; } String getID() { return ibis.getID(); } @Override public String toString() { return ibis.toString() + "@T" + getCurrentTime(); } public Event getEvent() { return event; } }