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
BaseOverlayMessagemsg
GlobalStatisticsglobalStatistics


Detailed Description

Definition at line 1159 of file BaseOverlay.cc.


Constructor & Destructor Documentation

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

Definition at line 1166 of file BaseOverlay.cc.

01166                                                                        {
01167         this->overlay = overlay;
01168         this->msg = msg;
01169         globalStatistics = overlay->globalStatistics;
01170         pendingLookups++;
01171     }

SendToKeyListener::~SendToKeyListener (  )  [inline]

Definition at line 1173 of file BaseOverlay.cc.

01173                          {
01174         pendingLookups--;
01175         overlay = NULL;
01176         if (msg != NULL) {
01177             delete msg;
01178             msg = NULL;
01179         }
01180     }


Member Function Documentation

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

Implements LookupListener.

Definition at line 1182 of file BaseOverlay.cc.

01182                                                         {
01183         if (dynamic_cast<BaseRouteMessage*>(msg)) {
01184             BaseRouteMessage* routeMsg = static_cast<BaseRouteMessage*>(msg);
01185             if (lookup->isValid()) {
01186                 if (lookup->getResult().size()==0) {
01187                     EV << "[SendToKeyListener::lookupFinished()]\n"
01188                           "    [ERROR] SendToKeyListener: Valid result, "
01189                           "but empty array." << endl;
01190                 } else {
01191                     routeMsg->setHopCount(routeMsg->getHopCount()
01192                                           + lookup->getAccumulatedHops());
01193 
01194                     for (uint32_t i=0; i<lookup->getResult().size(); i++) {
01195                         overlay->sendRouteMessage(lookup->getResult()[i],
01196                                                   static_cast<BaseRouteMessage*>
01197                                                    (routeMsg->dup()),
01198                                                   overlay->routeMsgAcks);
01199                     }
01200                 }
01201             } else {
01202                 EV << "[SendToKeyListener::lookupFinished()]\n"
01203                    << "    Lookup failed - dropping message"
01204                    << endl;
01205                 //std::cout << simTime() << " "
01206                 //          << routeMsg->getSrcNode()
01207                 //          << " [SendToKeyListener::lookupFinished()]\n"
01208                 //          << "    Lookup failed - dropping message"
01209                 //          << std::endl;
01210                 RECORD_STATS(overlay->numDropped++;
01211                              overlay->bytesDropped += routeMsg->getByteLength());
01212             }
01213         } else if (dynamic_cast<LookupCall*>(msg)) {
01214             LookupCall* call = static_cast<LookupCall*>(msg);
01215             LookupResponse* response = new LookupResponse();
01216             response->setKey(call->getKey());
01217             response->setHopCount(lookup->getAccumulatedHops());
01218             if (lookup->isValid()) {
01219                 response->setIsValid(true);
01220                 response->setSiblingsArraySize(lookup->getResult().size());
01221                 for (uint32_t i=0; i<lookup->getResult().size(); i++) {
01222                     response->setSiblings(i, lookup->getResult()[i]);
01223                 }
01224                 if (lookup->getResult().size() == 0) {
01225                     EV << "[SendToKeyListener::lookupFinished() @ "
01226                        << overlay->thisNode.getAddress()
01227                        << " (" << overlay->thisNode.getKey().toString(16) << ")]\n"
01228                        << "    LookupCall "
01229                        << call->getNonce()
01230                        << " failed! (size=0)" << endl;
01231                 }
01232             } else {
01233                 response->setIsValid(false);
01234                 EV << "[SendToKeyListener::lookupFinished() @ "
01235                    << overlay->thisNode.getAddress()
01236                    << " (" << overlay->thisNode.getKey().toString(16) << ")]\n"
01237                    << "    LookupCall "
01238                    << call->getNonce()
01239                    << " failed!" << endl;
01240             }
01241             overlay->sendRpcResponse(call, response);
01242             msg = NULL;
01243         } else {
01244             throw cRuntimeError("SendToKeyListener::lookupFinished(): "
01245                                     "Unknown message type!");
01246         }
01247         delete this;
01248     }


Member Data Documentation

Definition at line 1164 of file BaseOverlay.cc.

Referenced by SendToKeyListener().

Definition at line 1163 of file BaseOverlay.cc.

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

Definition at line 1162 of file BaseOverlay.cc.

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


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

Generated on Tue Sep 8 17:27:02 2009 for OverSim by  doxygen 1.5.8