Gia search test application. More...
#include <GIASearchApp.h>
Public Member Functions | |
GIASearchApp () | |
virtual | ~GIASearchApp () |
Protected Member Functions | |
virtual void | initializeApp (int stage) |
initializes base class-attributes | |
void | handleLowerMessage (cMessage *msg) |
processes self-messages | |
virtual void | handleTimerEvent (cMessage *msg) |
virtual void | finishApp () |
collects statistical data | |
Protected Attributes | |
SearchMsgBookkeeping * | srMsgBook |
pointer to Search-Message-Bookkeeping-List in this node | |
double | mean |
mean interval for next message | |
double | deviation |
deviation of mean interval | |
bool | randomNodes |
use random destination nodes or only nodes from GlobalNodeList? | |
int | maxResponses |
maximum number of responses per search message | |
int | msgByteLength |
int | stat_keyListMessagesSent |
number of keyList-Messages sent | |
int | stat_keyListBytesSent |
number of keyList-Bytes sent | |
int | stat_searchMessagesSent |
number of search-Messages sent | |
int | stat_searchBytesSent |
number of search-Messages-Bytes sent | |
int | stat_searchResponseMessages |
number of received search-Response-Messages | |
int | stat_searchResponseBytes |
number of received search-Response-Messages-Bytes | |
cMessage * | search_timer |
timer for search messages | |
cMessage * | keyList_timer |
timer for initial key list packet to overlay | |
Static Protected Attributes | |
static const uint32_t | ID_L = 16 |
static const uint32_t | SEQNUM_L = 16 |
Private Attributes | |
std::vector< OverlayKey > * | keyList |
list of all maintained key of this application |
Gia search test application.
Gia search test application, sends periodically SEARCH-Messages and collects statistical data.
Definition at line 45 of file GIASearchApp.h.
GIASearchApp::GIASearchApp | ( | ) |
Definition at line 37 of file GIASearchApp.cc.
{ search_timer = keyList_timer = NULL; srMsgBook = NULL; }
GIASearchApp::~GIASearchApp | ( | ) | [virtual] |
Definition at line 43 of file GIASearchApp.cc.
{ cancelAndDelete(search_timer); cancelAndDelete(keyList_timer); if (srMsgBook != NULL) { delete srMsgBook; srMsgBook = NULL; } }
void GIASearchApp::finishApp | ( | ) | [protected, virtual] |
collects statistical data
Reimplemented from BaseApp.
Definition at line 178 of file GIASearchApp.cc.
{ // record scalar data GiaSearchStats stats = srMsgBook->getStatisticalData(); if (stats.minDelay == 0 && stats.maxDelay == 0 && stats.minHopCount == 0 && stats.maxHopCount == 0 && stats.responseCount == 0) return; globalStatistics->addStdDev("GIASearchApp: SearchMsg avg. min delay", stats.minDelay); globalStatistics->addStdDev("GIASearchApp: SearchMsg avg. max delay", stats.maxDelay); globalStatistics->addStdDev("GIASearchApp: SearchMsg avg. min hops", stats.minHopCount); globalStatistics->addStdDev("GIASearchApp: SearchMsg avg. max hops", stats.maxHopCount); globalStatistics->addStdDev("GIASearchApp: SearchMsg avg. response count", stats.responseCount); }
void GIASearchApp::handleLowerMessage | ( | cMessage * | msg | ) | [protected, virtual] |
processes self-messages
method to handle self-messages should be overwritten in derived application if needed
msg | self-message method to handle non-commonAPI messages from the overlay | |
msg | message to handle |
Reimplemented from BaseApp.
Definition at line 154 of file GIASearchApp.cc.
{ GIAanswer* answer = check_and_cast<GIAanswer*>(msg); OverlayCtrlInfo* overlayCtrlInfo = check_and_cast<OverlayCtrlInfo*>(answer->removeControlInfo()); OverlayKey searchKey = answer->getSearchKey(); if (debugOutput) EV << "[GIASearchApp::handleLowerMessage() @ " << overlay->getThisNode().getIp()<< "]\n" << " Node received answer-message from overlay:" << " (key: " << searchKey << " at node " << answer->getNode() << ")" << endl; stat_searchResponseMessages++; stat_searchResponseBytes += answer->getByteLength(); if (srMsgBook->contains(searchKey)) srMsgBook->updateItem(searchKey, overlayCtrlInfo->getHopCount()); delete answer; }
void GIASearchApp::handleTimerEvent | ( | cMessage * | msg | ) | [protected, virtual] |
Definition at line 83 of file GIASearchApp.cc.
{ if(msg == keyList_timer) { keyList = globalNodeList->getKeyList(par("maximumKeys")); WATCH_VECTOR(*keyList); // create message GIAput* putMsg = new GIAput("GIA-Keylist"); putMsg->setCommand(GIA_PUT); putMsg->setKeysArraySize(keyList->size()); std::vector<OverlayKey>::iterator it; int k; for(it = keyList->begin(), k = 0; it != keyList->end(); it++, k++) putMsg->setKeys(k, *it); putMsg->setBitLength(GIAPUT_L(putMsg)); sendMessageToLowerTier(putMsg); if (debugOutput) EV << "[GIASearchApp::handleTimerEvent() @ " << overlay->getThisNode().getIp()<< "]\n" << " Node sent keylist to overlay." << endl; stat_keyListMessagesSent++; stat_keyListBytesSent += putMsg->getByteLength(); } else if(msg == search_timer) { // schedule next search-message scheduleAt(simTime() + truncnormal(mean, deviation), msg); // do nothing, if the network is still in the initiaization phase if((!par("activeNetwInitPhase")) && (underlayConfigurator->isInInitPhase())) return; OverlayKey keyListItem; uint32_t maximumTries = 20; // pic a search key we are not already searching do { if (maximumTries-- == 0) break; keyListItem = globalNodeList->getRandomKeyListItem(); } while ((keyListItem.isUnspecified()) && ((srMsgBook->contains(keyListItem)))); if (!keyListItem.isUnspecified()) { // create message GIAsearch* getMsg = new GIAsearch("GIA-Search"); getMsg->setCommand(GIA_SEARCH); getMsg->setSearchKey(keyListItem); getMsg->setMaxResponses(maxResponses); getMsg->setBitLength(GIAGET_L(getMsg)); sendMessageToLowerTier(getMsg); // add search key to our bookkeeping list srMsgBook->addMessage(keyListItem); if (debugOutput) EV << "[GIASearchApp::handleTimerEvent() @ " << overlay->getThisNode().getIp()<< "]\n" << " Node sent get-message to overlay." << endl; stat_searchMessagesSent++; stat_searchBytesSent += getMsg->getByteLength(); } } }
void GIASearchApp::initializeApp | ( | int | stage | ) | [protected, virtual] |
initializes base class-attributes
stage | the init stage |
Reimplemented from BaseApp.
Definition at line 53 of file GIASearchApp.cc.
{ if (stage != MIN_STAGE_APP) return; // fetch parameters mean = par("messageDelay"); deviation = mean / 3; randomNodes = par("randomNodes"); maxResponses = par("maxResponses"); srMsgBook = new SearchMsgBookkeeping(); // statistics stat_keyListMessagesSent = 0; stat_keyListBytesSent = 0; stat_searchMessagesSent = 0; stat_searchBytesSent = 0; stat_searchResponseMessages = 0; stat_searchResponseBytes = 0; // initiate test message emision search_timer = new cMessage("search_timer"); scheduleAt(simTime() + truncnormal(mean, deviation), search_timer); keyList_timer = new cMessage("keyList_timer"); scheduleAt(simTime() + uniform(0.0, 10.0), keyList_timer); }
double GIASearchApp::deviation [protected] |
deviation of mean interval
Definition at line 77 of file GIASearchApp.h.
Referenced by handleTimerEvent(), and initializeApp().
const uint32_t GIASearchApp::ID_L = 16 [static, protected] |
Definition at line 82 of file GIASearchApp.h.
std::vector<OverlayKey>* GIASearchApp::keyList [private] |
list of all maintained key of this application
Definition at line 53 of file GIASearchApp.h.
Referenced by handleTimerEvent().
cMessage* GIASearchApp::keyList_timer [protected] |
timer for initial key list packet to overlay
Definition at line 95 of file GIASearchApp.h.
Referenced by GIASearchApp(), handleTimerEvent(), initializeApp(), and ~GIASearchApp().
int GIASearchApp::maxResponses [protected] |
maximum number of responses per search message
Definition at line 79 of file GIASearchApp.h.
Referenced by handleTimerEvent(), and initializeApp().
double GIASearchApp::mean [protected] |
mean interval for next message
Definition at line 76 of file GIASearchApp.h.
Referenced by handleTimerEvent(), and initializeApp().
int GIASearchApp::msgByteLength [protected] |
Definition at line 84 of file GIASearchApp.h.
bool GIASearchApp::randomNodes [protected] |
use random destination nodes or only nodes from GlobalNodeList?
Definition at line 78 of file GIASearchApp.h.
Referenced by initializeApp().
cMessage* GIASearchApp::search_timer [protected] |
timer for search messages
Definition at line 94 of file GIASearchApp.h.
Referenced by GIASearchApp(), handleTimerEvent(), initializeApp(), and ~GIASearchApp().
const uint32_t GIASearchApp::SEQNUM_L = 16 [static, protected] |
Definition at line 83 of file GIASearchApp.h.
SearchMsgBookkeeping* GIASearchApp::srMsgBook [protected] |
pointer to Search-Message-Bookkeeping-List in this node
Definition at line 73 of file GIASearchApp.h.
Referenced by finishApp(), GIASearchApp(), handleLowerMessage(), handleTimerEvent(), initializeApp(), and ~GIASearchApp().
int GIASearchApp::stat_keyListBytesSent [protected] |
number of keyList-Bytes sent
Definition at line 88 of file GIASearchApp.h.
Referenced by handleTimerEvent(), and initializeApp().
int GIASearchApp::stat_keyListMessagesSent [protected] |
number of keyList-Messages sent
Definition at line 87 of file GIASearchApp.h.
Referenced by handleTimerEvent(), and initializeApp().
int GIASearchApp::stat_searchBytesSent [protected] |
number of search-Messages-Bytes sent
Definition at line 90 of file GIASearchApp.h.
Referenced by handleTimerEvent(), and initializeApp().
int GIASearchApp::stat_searchMessagesSent [protected] |
number of search-Messages sent
Definition at line 89 of file GIASearchApp.h.
Referenced by handleTimerEvent(), and initializeApp().
int GIASearchApp::stat_searchResponseBytes [protected] |
number of received search-Response-Messages-Bytes
Definition at line 92 of file GIASearchApp.h.
Referenced by handleLowerMessage(), and initializeApp().
int GIASearchApp::stat_searchResponseMessages [protected] |
number of received search-Response-Messages
Definition at line 91 of file GIASearchApp.h.
Referenced by handleLowerMessage(), and initializeApp().