#include <ConnectivityProbe.h>
Public Member Functions | |
virtual void | initialize () |
virtual void | handleMessage (cMessage *msg) |
virtual | ~ConnectivityProbe () |
Private Member Functions | |
void | extractTopology () |
int | findComponent (OverlayKey key, int Component) |
Private Attributes | |
double | probeIntervall |
cMessage * | probeTimer |
VTopology | Topology |
cOutVector | cOV_NodeCount |
cOutVector | cOV_MaximumComponent |
cOutVector | cOV_ZeroMissingNeighbors |
cOutVector | cOV_OneMissingNeighbor |
cOutVector | cOV_TwoMissingNeighbor |
cOutVector | cOV_ThreeMissingNeighbor |
cOutVector | cOV_FourMissingNeighbor |
cOutVector | cOV_FiveMissingNeighbors |
cOutVector | cOV_SeveralMissingNeighbors |
cOutVector | cOV_AverageMissingNeighbors |
cOutVector | cOV_MaxMissingNeighbors |
ConnectivityProbe::~ConnectivityProbe | ( | ) | [virtual] |
void ConnectivityProbe::initialize | ( | ) | [virtual] |
00040 { 00041 probeIntervall = par("connectivityProbeIntervall"); 00042 probeTimer = new cMessage("probeTimer"); 00043 if(probeIntervall != 0.0f) { 00044 scheduleAt(simulation.simTime() + probeIntervall, probeTimer); 00045 00046 cOV_NodeCount.setName("Total Node Count"); 00047 cOV_MaximumComponent.setName("Maximum Component Size"); 00048 cOV_ZeroMissingNeighbors.setName("Nodes with 0 Missing Neighbors"); 00049 cOV_OneMissingNeighbor.setName("Nodes with 1 Missing Neighbor"); 00050 cOV_TwoMissingNeighbor.setName("Nodes with 2 Missing Neighbor"); 00051 cOV_ThreeMissingNeighbor.setName("Nodes with 3 Missing Neighbor"); 00052 cOV_FourMissingNeighbor.setName("Nodes with 4 Missing Neighbor"); 00053 cOV_FiveMissingNeighbors.setName("Nodes with 5 Missing Neighbors"); 00054 cOV_SeveralMissingNeighbors.setName("Nodes with more than 5 Missing Neighbors"); 00055 cOV_AverageMissingNeighbors.setName("Average Missing Neighbors per Node"); 00056 cOV_MaxMissingNeighbors.setName("Max Missing Neighbors per Node"); 00057 } 00058 }
void ConnectivityProbe::handleMessage | ( | cMessage * | msg | ) | [virtual] |
00061 { 00062 // catch self timer messages 00063 if(msg->isName("probeTimer")) { 00064 //reset timer 00065 cancelEvent(probeTimer); 00066 scheduleAt(simulation.simTime() + probeIntervall, msg); 00067 00068 // fill topology with all VAST modules 00069 extractTopology(); 00070 00071 int Component = 1; 00072 unsigned int maxComponent = 0; 00073 for(VTopology::iterator itTopology = Topology.begin(); itTopology != Topology.end(); ++itTopology) { 00074 int count = findComponent(itTopology->second.module()->getThisNode().key, Component); 00075 if(count > maxComponent) { 00076 maxComponent = count; 00077 } 00078 if(maxComponent == Topology.size()) { 00079 break; 00080 } 00081 ++Component; 00082 } 00083 00084 cOV_NodeCount.record((double)Topology.size()); 00085 cOV_MaximumComponent.record((double)maxComponent); 00086 00087 int mnZero, mnOne, mnTwo, mnThree, mnFour, mnFive, mnSeveral, mnMax; 00088 double mnAverage = 0.0; 00089 double AOIWidthSqr = Topology.begin()->second.module()->getAOI(); 00090 AOIWidthSqr *= AOIWidthSqr; 00091 mnZero = mnOne = mnTwo = mnThree = mnFour = mnFive = mnSeveral = mnMax = 0; 00092 00093 for(VTopology::iterator itTopology = Topology.begin(); itTopology != Topology.end(); ++itTopology) { 00094 NodeSet SiteHandles; 00095 Vector2D vastPosition = itTopology->second.module()->getPosition(); 00096 int missing = 0; 00097 for(VTopology::iterator itI = Topology.begin(); itI != Topology.end(); ++itI) { 00098 if(itI != itTopology && vastPosition.distanceSqr(itI->second.module()->getPosition()) <= AOIWidthSqr) { 00099 SiteHandles.insert(itI->second.module()->getThisNode()); 00100 } 00101 } 00102 00103 for(NodeSet::iterator itSiteHandles = SiteHandles.begin(); itSiteHandles != SiteHandles.end(); ++itSiteHandles) { 00104 if(itTopology->second.module()->getList()->Sites.find(*itSiteHandles) == itTopology->second.module()->getList()->Sites.end()) { 00105 ++missing; 00106 } 00107 } 00108 00109 switch(missing) { 00110 case 0: 00111 ++mnZero; 00112 break; 00113 case 1: 00114 ++mnOne; 00115 break; 00116 case 2: 00117 ++mnTwo; 00118 break; 00119 case 3: 00120 ++mnThree; 00121 break; 00122 case 4: 00123 ++mnFour; 00124 break; 00125 case 5: 00126 ++mnFive; 00127 break; 00128 default: 00129 ++mnSeveral; 00130 } 00131 mnAverage += missing; 00132 if(mnMax < missing) { 00133 mnMax = missing; 00134 } 00135 } 00136 mnAverage /= (double)Topology.size(); 00137 00138 cOV_ZeroMissingNeighbors.record((double)mnZero); 00139 cOV_OneMissingNeighbor.record((double)mnOne); 00140 cOV_TwoMissingNeighbor.record((double)mnTwo); 00141 cOV_ThreeMissingNeighbor.record((double)mnThree); 00142 cOV_FourMissingNeighbor.record((double)mnFour); 00143 cOV_FiveMissingNeighbors.record((double)mnFive); 00144 cOV_SeveralMissingNeighbors.record((double)mnSeveral); 00145 cOV_AverageMissingNeighbors.record(mnAverage); 00146 cOV_MaxMissingNeighbors.record((double)mnMax); 00147 00148 Topology.clear(); 00149 } 00150 }
void ConnectivityProbe::extractTopology | ( | ) | [private] |
00153 { 00154 for(int i=0; i<=simulation.lastModuleId(); i++) { 00155 cModule* module = simulation.module(i); 00156 if(module && dynamic_cast<Vast*>(module)) { 00157 Vast* vast = check_and_cast<Vast*>(module); 00158 if(vast->getState() == BaseOverlay::READY) { 00159 VTopologyNode temp(i); 00160 Topology.insert(std::make_pair(vast->getThisNode().key, temp)); 00161 } 00162 } 00163 } 00164 }
int ConnectivityProbe::findComponent | ( | OverlayKey | key, | |
int | Component | |||
) | [private] |
00167 { 00168 VTopology::iterator itEntry = Topology.find(key); 00169 if(itEntry != Topology.end() && itEntry->second.componentCounter < Component) { 00170 int visited = 1; 00171 itEntry->second.componentCounter = Component; 00172 Vast* vast = itEntry->second.module(); 00173 for(SiteMap::iterator itSites = vast->getList()->Sites.begin(); itSites != vast->getList()->Sites.end(); ++itSites) { 00174 visited += findComponent(itSites->first.key, Component); 00175 } 00176 return visited; 00177 } 00178 return 0; 00179 }
double ConnectivityProbe::probeIntervall [private] |
cMessage* ConnectivityProbe::probeTimer [private] |
VTopology ConnectivityProbe::Topology [private] |
cOutVector ConnectivityProbe::cOV_NodeCount [private] |
cOutVector ConnectivityProbe::cOV_MaximumComponent [private] |
cOutVector ConnectivityProbe::cOV_ZeroMissingNeighbors [private] |
cOutVector ConnectivityProbe::cOV_OneMissingNeighbor [private] |
cOutVector ConnectivityProbe::cOV_TwoMissingNeighbor [private] |
cOutVector ConnectivityProbe::cOV_ThreeMissingNeighbor [private] |
cOutVector ConnectivityProbe::cOV_FourMissingNeighbor [private] |
cOutVector ConnectivityProbe::cOV_FiveMissingNeighbors [private] |
cOutVector ConnectivityProbe::cOV_SeveralMissingNeighbors [private] |
cOutVector ConnectivityProbe::cOV_AverageMissingNeighbors [private] |
cOutVector ConnectivityProbe::cOV_MaxMissingNeighbors [private] |