#include <SimpleClient.h>
Inheritance diagram for SimpleClient:
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 | |
Repository * | repository |
double | moveDelay |
Vector | position |
MovementGenerator * | Generator |
std::map< TransportAddress, Vector > | Neighbors |
std::map< TransportAddress, Vector >::iterator | itNeighbors |
cMessage * | move_timer |
SimpleClient::~SimpleClient | ( | ) | [virtual] |
void SimpleClient::initializeApp | ( | int | stage | ) | [virtual] |
initializes derived class-attributes
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
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
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 }
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] |