Public Member Functions | |
SendToKeyListener (BaseOverlay *overlay, BaseOverlayMessage *msg) | |
~SendToKeyListener () | |
virtual void | lookupFinished (AbstractLookup *lookup) |
Private Attributes | |
BaseOverlay * | overlay |
BaseOverlayMessage * | msg |
GlobalStatistics * | globalStatistics |
Definition at line 1217 of file BaseOverlay.cc.
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; } }
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; }
Definition at line 1222 of file BaseOverlay.cc.
Referenced by SendToKeyListener().
BaseOverlayMessage* SendToKeyListener::msg [private] |
Definition at line 1221 of file BaseOverlay.cc.
Referenced by lookupFinished(), and ~SendToKeyListener().
BaseOverlay* SendToKeyListener::overlay [private] |
Definition at line 1220 of file BaseOverlay.cc.
Referenced by lookupFinished(), and ~SendToKeyListener().