Public Member Functions | Protected Member Functions | Protected Attributes | Static Protected Attributes | Private Attributes

GIASearchApp Class Reference

Gia search test application. More...

#include <GIASearchApp.h>

Inheritance diagram for GIASearchApp:
BaseApp BaseRpc BaseTcpSupport RpcListener

List of all members.

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

SearchMsgBookkeepingsrMsgBook
 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

Detailed Description

Gia search test application.

Gia search test application, sends periodically SEARCH-Messages and collects statistical data.

See also:
BaseApp

Definition at line 45 of file GIASearchApp.h.


Constructor & Destructor Documentation

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;
    }
}


Member Function Documentation

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

Parameters:
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

Parameters:
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);
}


Member Data Documentation

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.

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

number of keyList-Bytes sent

Definition at line 88 of file GIASearchApp.h.

Referenced by handleTimerEvent(), and initializeApp().

number of keyList-Messages sent

Definition at line 87 of file GIASearchApp.h.

Referenced by handleTimerEvent(), and initializeApp().

number of search-Messages-Bytes sent

Definition at line 90 of file GIASearchApp.h.

Referenced by handleTimerEvent(), and initializeApp().

number of search-Messages sent

Definition at line 89 of file GIASearchApp.h.

Referenced by handleTimerEvent(), and initializeApp().

number of received search-Response-Messages-Bytes

Definition at line 92 of file GIASearchApp.h.

Referenced by handleLowerMessage(), and initializeApp().

number of received search-Response-Messages

Definition at line 91 of file GIASearchApp.h.

Referenced by handleLowerMessage(), and initializeApp().


The documentation for this class was generated from the following files: