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().
1.7.1