package org.lucci.madhoc.node_memory;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import org.lucci.madhoc.network.Station;
import org.lucci.madhoc.network.Application;
public class NodeMemory extends Application
{
private Map<Station, Double> computerMap = new HashMap<Station, Double>();
private double forgetAfter = 60000;
public String getName()
{
return "node_memory";
}
public void doIt(double time)
{
for (Station c : getComputer().getNetworkingUnit().getNeighborhood())
{
computerMap.put(c, getSimulatedTime());
}
{
Iterator i = new HashSet(getKnownComputers()).iterator();
while (i.hasNext())
{
double date = getLastMeetingData((Station) i.next());
if (getSimulatedTime() - date > this.forgetAfter)
{
i.remove();
}
}
}
}
public boolean hasAlreadyMet(Station c)
{
return computerMap.get(c) != null;
}
public double getLastMeetingData(Station c)
{
return ((Double) computerMap.get(c)).doubleValue();
}
public Collection getKnownComputers()
{
return computerMap.keySet();
}
public void configure() throws Throwable
{
this.forgetAfter = Double.valueOf(getMonitor().getNetwork().getSimulation().getConfiguration().getConfigurationValue("neighbor_memory_forget_after")).doubleValue();
}
}