SendToKeyListener Class Reference

Inheritance diagram for SendToKeyListener:
LookupListener

List of all members.

Public Member Functions

 SendToKeyListener (BaseOverlay *overlay, BaseOverlayMessage *msg)
 ~SendToKeyListener ()
virtual void lookupFinished (AbstractLookup *lookup)

Private Attributes

BaseOverlayoverlay
BaseOverlayMessage * msg
GlobalStatisticsglobalStatistics

Detailed Description

Definition at line 1209 of file BaseOverlay.cc.


Constructor & Destructor Documentation

SendToKeyListener::SendToKeyListener ( BaseOverlay overlay,
BaseOverlayMessage *  msg 
) [inline]

Definition at line 1216 of file BaseOverlay.cc.

01216                                                                        {
01217         this->overlay = overlay;
01218         this->msg = msg;
01219         globalStatistics = overlay->globalStatistics;
01220         pendingLookups++;
01221     }

SendToKeyListener::~SendToKeyListener (  )  [inline]

Definition at line 1223 of file BaseOverlay.cc.

01223                          {
01224         pendingLookups--;
01225         overlay = NULL;
01226         if (msg != NULL) {
01227             delete msg;
01228             msg = NULL;
01229         }
01230     }


Member Function Documentation

virtual void SendToKeyListener::lookupFinished ( AbstractLookup lookup  )  [inline, virtual]

Implements LookupListener.

Definition at line 1232 of file BaseOverlay.cc.

01232                                                         {
01233         if (dynamic_cast<BaseRouteMessage*>(msg)) {
01234             BaseRouteMessage* routeMsg = static_cast<BaseRouteMessage*>(msg);
01235             if (lookup->isValid()) {
01236                 if (lookup->getResult().size()==0) {
01237                     EV << "[SendToKeyListener::lookupFinished()]\n"
01238                           "    [ERROR] SendToKeyListener: Valid result, "
01239                           "but empty array." << endl;
01240                 } else {
01241                     routeMsg->setHopCount(routeMsg->getHopCount()
01242                                           + lookup->getAccumulatedHops());
01243 
01244                     for (uint32_t i=0; i<lookup->getResult().size(); i++) {
01245                         overlay->sendRouteMessage(lookup->getResult()[i],
01246                                                   static_cast<BaseRouteMessage*>
01247                                                    (routeMsg->dup()),
01248                                                   overlay->routeMsgAcks);
01249                     }
01250                 }
01251             } else {
01252                 EV << "[SendToKeyListener::lookupFinished()]\n"
01253                    << "    Lookup failed - dropping message"
01254                    << endl;
01255                 //std::cout << simTime() << " "
01256                 //          << routeMsg->getSrcNode()
01257                 //          << " [SendToKeyListener::lookupFinished()]\n"
01258                 //          << "    Lookup failed - dropping message"
01259                 //          << std::endl;
01260                 RECORD_STATS(overlay->numDropped++;
01261                              overlay->bytesDropped += routeMsg->getByteLength());
01262             }
01263         } else if (dynamic_cast<LookupCall*>(msg)) {
01264             LookupCall* call = static_cast<LookupCall*>(msg);
01265             LookupResponse* response = new LookupResponse();
01266             response->setKey(call->getKey());
01267             response->setHopCount(lookup->getAccumulatedHops());
01268             if (lookup->isValid()) {
01269                 response->setIsValid(true);
01270                 response->setSiblingsArraySize(lookup->getResult().size());
01271                 for (uint32_t i=0; i<lookup->getResult().size(); i++) {
01272                     response->setSiblings(i, lookup->getResult()[i]);
01273                 }
01274                 if (lookup->getResult().size() == 0) {
01275                     EV << "[SendToKeyListener::lookupFinished() @ "
01276                        << overlay->thisNode.getAddress()
01277                        << " (" << overlay->thisNode.getKey().toString(16) << ")]\n"
01278                        << "    LookupCall "
01279                        << call->getNonce()
01280                        << " failed! (size=0)" << endl;
01281                 }
01282             } else {
01283                 response->setIsValid(false);
01284                 EV << "[SendToKeyListener::lookupFinished() @ "
01285                    << overlay->thisNode.getAddress()
01286                    << " (" << overlay->thisNode.getKey().toString(16) << ")]\n"
01287                    << "    LookupCall "
01288                    << call->getNonce()
01289                    << " failed!" << endl;
01290             }
01291             overlay->sendRpcResponse(call, response);
01292             msg = NULL;
01293         } else {
01294             throw cRuntimeError("SendToKeyListener::lookupFinished(): "
01295                                     "Unknown message type!");
01296         }
01297         delete this;
01298     }


Member Data Documentation

Definition at line 1214 of file BaseOverlay.cc.

Referenced by SendToKeyListener().

BaseOverlayMessage* SendToKeyListener::msg [private]

Definition at line 1213 of file BaseOverlay.cc.

Referenced by lookupFinished(), and ~SendToKeyListener().

Definition at line 1212 of file BaseOverlay.cc.

Referenced by lookupFinished(), and ~SendToKeyListener().


The documentation for this class was generated from the following file:
Generated on Wed May 26 16:21:19 2010 for OverSim by  doxygen 1.6.3