Public Member Functions | Private Attributes

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 1217 of file BaseOverlay.cc.


Constructor & Destructor Documentation

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

Definition at line 1224 of file BaseOverlay.cc.

                                                                       {
        this->overlay = overlay;
        this->msg = msg;
        globalStatistics = overlay->globalStatistics;
        pendingLookups++;
    }

SendToKeyListener::~SendToKeyListener (  )  [inline]

Definition at line 1231 of file BaseOverlay.cc.

                         {
        pendingLookups--;
        overlay = NULL;
        if (msg != NULL) {
            delete msg;
            msg = NULL;
        }
    }


Member Function Documentation

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

Implements LookupListener.

Definition at line 1240 of file BaseOverlay.cc.

                                                        {
        if (dynamic_cast<BaseRouteMessage*>(msg)) {
            BaseRouteMessage* routeMsg = static_cast<BaseRouteMessage*>(msg);
            if (lookup->isValid()) {
                if (lookup->getResult().size()==0) {
                    EV << "[SendToKeyListener::lookupFinished()]\n"
                          "    [ERROR] SendToKeyListener: Valid result, "
                          "but empty array." << endl;
                } else {
                    routeMsg->setHopCount(routeMsg->getHopCount()
                                          + lookup->getAccumulatedHops());

                    for (uint32_t i=0; i<lookup->getResult().size(); i++) {
                        overlay->sendRouteMessage(lookup->getResult()[i],
                                                  static_cast<BaseRouteMessage*>
                                                   (routeMsg->dup()),
                                                  overlay->routeMsgAcks);
                    }
                }
            } else {
                EV << "[SendToKeyListener::lookupFinished()]\n"
                   << "    Lookup failed - dropping message"
                   << endl;
                //std::cout << simTime() << " "
                //          << routeMsg->getSrcNode()
                //          << " [SendToKeyListener::lookupFinished()]\n"
                //          << "    Lookup failed - dropping message"
                //          << std::endl;
                RECORD_STATS(overlay->numDropped++;
                             overlay->bytesDropped += routeMsg->getByteLength());
            }
        } else if (dynamic_cast<LookupCall*>(msg)) {
            LookupCall* call = static_cast<LookupCall*>(msg);
            LookupResponse* response = new LookupResponse();
            response->setKey(call->getKey());
            response->setHopCount(lookup->getAccumulatedHops());
            if (lookup->isValid()) {
                response->setIsValid(true);
                response->setSiblingsArraySize(lookup->getResult().size());
                for (uint32_t i=0; i<lookup->getResult().size(); i++) {
                    response->setSiblings(i, lookup->getResult()[i]);
                }
                if (lookup->getResult().size() == 0) {
                    EV << "[SendToKeyListener::lookupFinished() @ "
                       << overlay->thisNode.getIp()
                       << " (" << overlay->thisNode.getKey().toString(16) << ")]\n"
                       << "    LookupCall "
                       << call->getNonce()
                       << " failed! (size=0)" << endl;
                }
            } else {
                response->setIsValid(false);
                EV << "[SendToKeyListener::lookupFinished() @ "
                   << overlay->thisNode.getIp()
                   << " (" << overlay->thisNode.getKey().toString(16) << ")]\n"
                   << "    LookupCall "
                   << call->getNonce()
                   << " failed!" << endl;
            }
            overlay->sendRpcResponse(call, response);
            msg = NULL;
        } else {
            throw cRuntimeError("SendToKeyListener::lookupFinished(): "
                                    "Unknown message type!");
        }
        delete this;
    }


Member Data Documentation

Definition at line 1222 of file BaseOverlay.cc.

Referenced by SendToKeyListener().

Definition at line 1221 of file BaseOverlay.cc.

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

Definition at line 1220 of file BaseOverlay.cc.

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


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