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


Constructor & Destructor Documentation

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

00921                                                                        {
00922         this->overlay = overlay;
00923         this->msg = msg;
00924         globalStatistics = overlay->globalStatistics;
00925         pendingLookups++;
00926     }

SendToKeyListener::~SendToKeyListener (  )  [inline]

00928                          {
00929         pendingLookups--;
00930         overlay = NULL;
00931         if (msg != NULL) {
00932             delete msg;
00933             msg = NULL;
00934         }
00935     }


Member Function Documentation

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

Implements LookupListener.

00937                                                         {
00938         if (dynamic_cast<BaseRouteMessage*>(msg)) {
00939             BaseRouteMessage* routeMsg = static_cast<BaseRouteMessage*>(msg);
00940             if (lookup->isValid()) {
00941                 if (lookup->getResult().size()==0) {
00942                     cout << "[ERROR] SendToKeyListener: Valid result, "
00943                     "but empty array." << endl;
00944                 } else {
00945                     routeMsg->setHopCount(routeMsg->getHopCount()
00946                                           + lookup->getAccumulatedHops());
00947 
00948                     for (uint i=0; i<lookup->getResult().size(); i++) {
00949                         overlay->sendRouteMessage(lookup->getResult()[i],
00950                                                   static_cast<BaseRouteMessage*>
00951                                                    (routeMsg->dup()),
00952                                                   overlay->useNextHopRpc);
00953                     }
00954                 }
00955             } else {
00956                 EV << "[SendToKeyListener::lookupFinished()]\n"
00957                 << "    Lookup failed - dropping message"
00958                 << endl;
00959                 RECORD_STATS(overlay->numDropped++;
00960                              overlay->bytesDropped += routeMsg->byteLength());
00961             }
00962         } else if (dynamic_cast<LookupCall*>(msg)) {
00963             LookupCall* call = static_cast<LookupCall*>(msg);
00964             LookupResponse* response = new LookupResponse();
00965 
00966             if (lookup->isValid()) {
00967 
00968                 response->setIsValid(true);
00969                 response->setKey(call->getKey());
00970                 response->setSiblingsArraySize(lookup->getResult().size());
00971                 for (uint i=0; i<lookup->getResult().size(); i++) {
00972                     response->setSiblings(i, lookup->getResult()[i]);
00973                 }
00974                 if (lookup->getResult().size() == 0) {
00975                     EV << "[SendToKeyListener::lookupFinished() @ "
00976                        << overlay->thisNode.ip
00977                        << " (" << overlay->thisNode.key.toString(16) << ")]\n"
00978                        << "    LookupCall "
00979                        << call->getNonce()
00980                        << " failed! (size=0)" << endl;
00981                 }
00982             } else {
00983                 response->setIsValid(false);
00984                 EV << "[SendToKeyListener::lookupFinished() @ "
00985                    << overlay->thisNode.ip
00986                    << " (" << overlay->thisNode.key.toString(16) << ")]\n"
00987                    << "    LookupCall "
00988                    << call->getNonce()
00989                    << " failed!" << endl;
00990             }
00991             overlay->sendRpcResponse(call, response);
00992             msg = NULL;
00993         } else {
00994             throw new cRuntimeError("SendToKeyListener::lookupFinished(): "
00995                                     "Unkown message type!");
00996         }
00997         delete this;
00998     }


Member Data Documentation

BaseOverlay* SendToKeyListener::overlay [private]

BaseOverlayMessage* SendToKeyListener::msg [private]

GlobalStatistics* SendToKeyListener::globalStatistics [private]


The documentation for this class was generated from the following file:
Generated on Thu Apr 17 13:19:30 2008 for ITM OverSim by  doxygen 1.5.3