SimpleClient Class Reference

#include <SimpleClient.h>

Inheritance diagram for SimpleClient:

BaseApp BaseRpc RpcListener List of all members.

Detailed Description

A simple test application, which simulates node movement based on different movement generators.


Public Member Functions

virtual ~SimpleClient ()
virtual void initializeApp (int stage)
 initializes derived class-attributes
virtual void handleTimerEvent (cMessage *msg)
 processes self-messages
virtual void handleAppMessage (cMessage *msg)
 method to handle non-commonAPI messages from the overlay

Protected Member Functions

void updateNeighbors (SimpleClientListMessage *scMsg)

Protected Attributes

Repositoryrepository
double moveDelay
Vector position
MovementGeneratorGenerator
std::map< TransportAddress,
Vector
Neighbors
std::map< TransportAddress,
Vector >::iterator 
itNeighbors
cMessage * move_timer


Constructor & Destructor Documentation

SimpleClient::~SimpleClient (  )  [virtual]

00123 {
00124     // destroy self timer messages
00125     cancelAndDelete(move_timer);
00126 }


Member Function Documentation

void SimpleClient::initializeApp ( int  stage  )  [virtual]

initializes derived class-attributes

Parameters:
stage the init stage

Reimplemented from BaseApp.

00029 {
00030     WATCH_MAP(Neighbors);
00031     WATCH(position);
00032 
00033     // fetch parameters
00034     moveDelay = par("moveDelay");
00035 
00036     repository = check_and_cast<Repository*>(simulation.moduleByPath("globalObserver.globalFunctions[0].repository"));
00037 
00038     if(strcmp(par("movementGenerator"), "greatGathering") == 0) {
00039         // debug output
00040         if(debugOutput) ev << "SIMPLECLIENT: Movement generator: greatGathering" << endl;
00041         Generator = new greatGathering(par("areaDimension"), par("movementSpeed"), &Neighbors, repository);
00042     } else if(strcmp(par("movementGenerator"), "groupRoaming") == 0) {
00043         // debug output
00044         if(debugOutput) ev << "SIMPLECLIENT: Movement generator: groupRoaming" << endl;
00045         Generator = new groupRoaming(par("areaDimension"), par("movementSpeed"), &Neighbors, repository, (int)par("groupSize"));
00046     } else {
00047         // debug output
00048         if(debugOutput) {
00049             if(strcmp(par("movementGenerator"), "randomRoaming") == 0) ev << "SIMPLECLIENT: Movement generator: randomRoaming" << endl;
00050             else ev << "SIMPLECLIENT: Movement generator: <unknown>. Defaulting to: randomRoaming" << endl;
00051         }
00052         Generator = new randomRoaming(par("areaDimension"), par("movementSpeed"), &Neighbors);
00053     }
00054 
00055     // self-messages
00056     move_timer = new cMessage("move_timer");
00057 
00058     onlyCommonAPIMessages = false;
00059 }

void SimpleClient::handleTimerEvent ( cMessage *  msg  )  [virtual]

processes self-messages

method to handle self-messages should be overwritten in derived application if needed

Parameters:
msg self-message

Reimplemented from BaseApp.

00062 {
00063     if(msg->isName("move_timer")) {
00064         //reset timer
00065         cancelEvent(move_timer);
00066         scheduleAt(simulation.simTime() + moveDelay, msg);
00067         // handle event
00068         Generator->move();
00069         position = Generator->getPosition();
00070         SimpleClientMoveMessage *scMsg = new SimpleClientMoveMessage("MOVE_INDICATION");
00071         scMsg->setCommand(MOVE_INDICATION);
00072         scMsg->setPosX(position.getX());
00073         scMsg->setPosY(position.getY());
00074         scMsg->setLength(SIMPLECLIENTMOVE_L(scMsg));
00075         sendMessageToOverlay(scMsg);
00076     }
00077     else delete msg;
00078 }

void SimpleClient::handleAppMessage ( cMessage *  msg  )  [virtual]

method to handle non-commonAPI messages from the overlay

Parameters:
msg message to handle

Reimplemented from BaseApp.

00081 {
00082     if(dynamic_cast<SimpleClientMessage*>(msg)) {
00083         SimpleClientMessage* simpleClientMsg = check_and_cast<SimpleClientMessage*>(msg);
00084         switch(simpleClientMsg->getCommand()) {
00085             case MOVE_REQUEST: {
00086                 Generator->move();
00087                 position = Generator->getPosition();
00088                 SimpleClientMoveMessage *scMsg = new SimpleClientMoveMessage("MOVE_INDICATION");
00089                 scMsg->setCommand(MOVE_INDICATION);
00090                 scMsg->setPosX(position.getX());
00091                 scMsg->setPosY(position.getY());
00092                 scMsg->setLength(SIMPLECLIENTMOVE_L(scMsg));
00093                 sendMessageToOverlay(scMsg);
00094             } break;
00095             case UPDATE_NEIGHBORS: {
00096                 SimpleClientListMessage* simpleClientListMsg = check_and_cast<SimpleClientListMessage*>(msg);
00097                 updateNeighbors(simpleClientListMsg);
00098             } break;
00099             case OVERLAY_READY: {
00100                 scheduleAt(simulation.simTime() + moveDelay, move_timer);
00101             } break;
00102         }
00103     }
00104     delete msg;
00105 }

void SimpleClient::updateNeighbors ( SimpleClientListMessage *  scMsg  )  [protected]

00108 {
00109     unsigned int i;
00110     Vector v;
00111     for(i=0; i<scMsg->getRemove_neighborArraySize(); i++) {
00112         Neighbors.erase(scMsg->getRemove_neighbor(i));
00113     }
00114     for(i=0; i<scMsg->getAdd_neighborArraySize(); i++) {
00115         v.setValue(scMsg->getAdd_neighbor_posX(i), scMsg->getAdd_neighbor_posY(i));
00116         itNeighbors = Neighbors.find(scMsg->getAdd_neighbor(i));
00117         if(itNeighbors != Neighbors.end()) Neighbors.erase(scMsg->getAdd_neighbor(i));
00118         Neighbors.insert(std::make_pair(scMsg->getAdd_neighbor(i), v));
00119     }
00120 }


Member Data Documentation

Repository* SimpleClient::repository [protected]

double SimpleClient::moveDelay [protected]

Vector SimpleClient::position [protected]

MovementGenerator* SimpleClient::Generator [protected]

std::map<TransportAddress, Vector> SimpleClient::Neighbors [protected]

std::map<TransportAddress, Vector>::iterator SimpleClient::itNeighbors [protected]

cMessage* SimpleClient::move_timer [protected]


The documentation for this class was generated from the following files:
Generated on Tue Jul 24 16:51:19 2007 for ITM OverSim by  doxygen 1.5.1