package jReto.module.dummy;
import jReto.util.RunLoop;
import java.util.HashSet;
import java.util.Set;
public class DummyNetworkInterface {
String interfaceName;
Set<DummyBrowser> browsers;
Set<DummyAdvertiser> advertisers;
RunLoop runloop;
private int recommendedPacketSize;
private int priority;
public DummyNetworkInterface(String interfaceName, RunLoop runloop, int recommendedPacketSize, int priority) {
this.interfaceName = interfaceName;
this.runloop = runloop;
this.recommendedPacketSize = recommendedPacketSize;
this.priority = priority;
this.browsers = new HashSet<DummyBrowser>();
this.advertisers = new HashSet<DummyAdvertiser>();
}
public void registerBrowser(final DummyBrowser browser) {
this.browsers.add(browser);
for (DummyAdvertiser advertiser : this.advertisers) notifyAddPeer(browser, advertiser);
}
public void unregisterBrowser(final DummyBrowser browser) {
this.browsers.remove(browser);
for (DummyAdvertiser advertiser : this.advertisers) notifyRemovePeer(browser, advertiser);
}
public void register(final DummyAdvertiser advertiser) {
this.advertisers.add(advertiser);
for (DummyBrowser browser : this.browsers) notifyAddPeer(browser, advertiser);
}
public void unregister(final DummyAdvertiser advertiser) {
this.advertisers.remove(advertiser);
for (DummyBrowser browser : this.browsers) notifyRemovePeer(browser, advertiser);
}
void notifyAddPeer(final DummyBrowser browser, final DummyAdvertiser advertiser) {
runloop.execute(new Runnable() {
@Override
public void run() {
browser.onAddPeer(advertiser.getIdentifier(), new DummyAddress(DummyNetworkInterface.this, advertiser, runloop));
}
});
}
void notifyRemovePeer(final DummyBrowser browser, final DummyAdvertiser advertiser) {
runloop.execute(new Runnable() {
@Override
public void run() {
browser.onRemovePeer(advertiser.getIdentifier());
}
});
}
public int getRecommendedPacketSize() {
return this.recommendedPacketSize;
}
public int getPriority() {
return this.priority;
}
public String getInterfaceName() {
return this.interfaceName;
}
public static interface DummyConnectionCreatedHook {
void createdConnection(DummyAddress address, DummyConnection connection);
}
public DummyConnectionCreatedHook connectionCreatedHook;
public static interface DummyConnectionClosedHook {
void closedConnections(DummyAddress address, DummyConnection outConnection, DummyConnection inConnection);
}
public DummyConnectionClosedHook connectionClosedHook;
}