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]

01025     {
01026         this->overlay = overlay;
01027         this->msg = msg;
01028         globalStatistics = overlay->globalStatistics;
01029         pendingLookups++;
01030     }

SendToKeyListener::~SendToKeyListener (  )  [inline]

01033     {
01034         pendingLookups--;
01035         overlay = NULL;
01036         if (msg != NULL) {
01037             delete msg;
01038             msg = NULL;
01039         }
01040     }


Member Function Documentation

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

Implements LookupListener.

01043     {
01044         if (dynamic_cast<BaseRouteMessage*>(msg)) {
01045             BaseRouteMessage* routeMsg = static_cast<BaseRouteMessage*>(msg);
01046             if (lookup->isValid()) {
01047                 if (lookup->getResult().size()==0) {
01048                     cout << "[ERROR] SendToKeyListener: Valid result, "
01049                         "but empty array." << endl;
01050                 } else {
01051                     routeMsg->setHopCount(routeMsg->getHopCount()
01052                                           + lookup->getAccumulatedHops());
01053                     
01054                     for (uint i=0; i<lookup->getResult().size(); i++) {
01055                         overlay->sendMessageToUDP(lookup->getResult()[i],
01056                                                   (BaseOverlayMessage*)msg->dup());
01057                     }
01058                 }
01059             } else {
01060                 EV << "[SendToKeyListener::lookupFinished()]\n"
01061                    << "    Lookup failed - dropping message" 
01062                    << endl;
01063                 RECORD_STATS(overlay->numDropped++;
01064                              overlay->bytesDropped += routeMsg->byteLength());
01065 //                              cout << "Lookup failed!" << endl;
01066             }
01067         } else if (dynamic_cast<LookupCall*>(msg)) {
01068             LookupCall* call = static_cast<LookupCall*>(msg);
01069             LookupResponse* response = new LookupResponse();
01070 
01071             if (lookup->isValid()) {
01072 //              std::cout << simulation.simTime() << ": LookupCall "
01073 //                        << call->getNonce()
01074 //                        << " finished (" << unansweredLookups << " missing)"
01075 //                        << endl;
01076 
01077                 response->setIsValid(true);
01078                 response->setKey(call->getKey());
01079                 response->setSiblingsArraySize(lookup->getResult().size());
01080                 for (uint i=0; i<lookup->getResult().size(); i++) {
01081                     response->setSiblings(i, lookup->getResult()[i]);
01082                 }
01083                 if (lookup->getResult().size() == 0) {
01084                     std::cout << simulation.simTime() << ": LookupCall "
01085                               << call->getNonce()
01086                               << " failed! (size=0) ********" << endl;
01087                 }
01088             } else {
01089                 response->setIsValid(false);
01090                 std::cout << simulation.simTime() << ": LookupCall "
01091                           << call->getNonce() << " failed! *********" << endl;
01092             }
01093             overlay->sendRpcResponse(RPC_TO_UPPERTIER, call, response);
01094             msg = NULL;
01095         } else {
01096             opp_error("SendToKeyListener::lookupFinished(): "
01097                       "Unkown message type!");
01098         }
01099         delete this;
01100     }


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 Wed Sep 26 12:13:02 2007 for ITM OverSim by  doxygen 1.5.1