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().
1.7.1