Skip to content

Commit

Permalink
Use static list of ip addresses in DummyKnowledgeManager
Browse files Browse the repository at this point in the history
  • Loading branch information
vladamatena committed Mar 13, 2015
1 parent 4a88d3e commit 5e51ac5
Showing 1 changed file with 31 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import cz.cuni.mff.d3s.deeco.task.TimerTaskListener;
import cz.cuni.mff.d3s.deeco.timer.CurrentTimeProvider;
import cz.cuni.mff.d3s.jdeeco.network.Network;
import cz.cuni.mff.d3s.jdeeco.network.address.IPAddress;
import cz.cuni.mff.d3s.jdeeco.network.address.MANETBroadcastAddress;
import cz.cuni.mff.d3s.jdeeco.network.l2.L2Packet;
import cz.cuni.mff.d3s.jdeeco.network.l2.L2PacketType;
Expand All @@ -32,7 +33,7 @@
/**
* Dummy implementation of knowledge publishing
*
* This uses only broadcast and ignores security
* This uses only broadcast and static list of IP peers, ignores security
*
* @author Vladimir Matena <matena@d3s.mff.cuni.cz>
*
Expand All @@ -42,13 +43,19 @@ public class DummyKnowledgePublisher implements DEECoPlugin, TimerTaskListener {
private KnowledgeManagerContainer knowledgeManagerContainer;
private CurrentTimeProvider timeProvider;
private DEECoContainer container;
private List<IPAddress> infrastructurePeers;

@Override
public List<Class<? extends DEECoPlugin>> getDependencies() {
return Arrays.asList(Network.class);
}

public DummyKnowledgePublisher() {
this(new LinkedList<IPAddress>());
}

public DummyKnowledgePublisher(List<IPAddress> peers) {
infrastructurePeers = peers;
RuntimeMetadataFactory factory = RuntimeMetadataFactoryExt.eINSTANCE;
KnowledgePath empty = factory.createKnowledgePath();
emptyPath = new LinkedList<>();
Expand Down Expand Up @@ -78,10 +85,10 @@ protected KnowledgeData prepareLocalKnowledgeData(KnowledgeManager km) throws Kn
// TODO: We are ignoring security, and host
// TODO: version is implemented by current time
long time = timeProvider.getCurrentMilliseconds();
return new KnowledgeData(getNonLocalKnowledge(km.get(emptyPath), km), new ValueSet(), new ValueSet(), new KnowledgeMetaData(
km.getId(), time, String.valueOf(container.getId()), time, 1));
return new KnowledgeData(getNonLocalKnowledge(km.get(emptyPath), km), new ValueSet(), new ValueSet(),
new KnowledgeMetaData(km.getId(), time, String.valueOf(container.getId()), time, 1));
}

// NOTE: Taken from DefaultKnowledgeDataManager
protected ValueSet getNonLocalKnowledge(ValueSet toFilter, KnowledgeManager km) {
ValueSet result = new ValueSet();
Expand Down Expand Up @@ -109,17 +116,24 @@ protected KnowledgeData filterLocalKnowledgeForKnownEnsembles(KnowledgeData kd)
return kd;
}
}


@Override
public void at(long time, Object triger) {
System.out.println("Publisher called at: " + time);

for(KnowledgeData data: prepareLocalKnowledgeData()) {
network.getL2().sendL2Packet(new L2Packet(new PacketHeader(L2PacketType.KNOWLEDGE), data),
MANETBroadcastAddress.BROADCAST);
// Get knowledge and distribute it
for (KnowledgeData data : prepareLocalKnowledgeData()) {
L2Packet packet = new L2Packet(new PacketHeader(L2PacketType.KNOWLEDGE), data);

// Distribute via broadcast
network.getL2().sendL2Packet(packet, MANETBroadcastAddress.BROADCAST);

// Distribute via infrastructure network
for (IPAddress address : getPeers()) {
network.getL2().sendL2Packet(packet, address);
}
}

Scheduler scheduler = container.getRuntimeFramework().getScheduler();
scheduler.addTask(new CustomStepTask(scheduler, this, Integer.getInteger(DeecoProperties.PUBLISHING_PERIOD,
PublisherTask.DEFAULT_PUBLISHING_PERIOD)));
Expand All @@ -131,12 +145,19 @@ public TimerTask getInitialTask(Scheduler scheduler) {
PublisherTask.DEFAULT_PUBLISHING_PERIOD));
}

/**
* Gets list of infrastructure peers
*/
protected List<IPAddress> getPeers() {
return infrastructurePeers;
}

@Override
public void init(DEECoContainer container) {
// Resolve dependencies
network = container.getPluginInstance(Network.class);
knowledgeManagerContainer = container.getRuntimeFramework().getContainer();
this.container = container;
this.container = container;

timeProvider = container.getRuntimeFramework().getScheduler().getTimer();

Expand Down

0 comments on commit 5e51ac5

Please sign in to comment.