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 1209 of file BaseOverlay.cc.
SendToKeyListener::SendToKeyListener | ( | BaseOverlay * | overlay, | |
BaseOverlayMessage * | msg | |||
) | [inline] |
Definition at line 1216 of file BaseOverlay.cc.
01216 { 01217 this->overlay = overlay; 01218 this->msg = msg; 01219 globalStatistics = overlay->globalStatistics; 01220 pendingLookups++; 01221 }
SendToKeyListener::~SendToKeyListener | ( | ) | [inline] |
Definition at line 1223 of file BaseOverlay.cc.
01223 { 01224 pendingLookups--; 01225 overlay = NULL; 01226 if (msg != NULL) { 01227 delete msg; 01228 msg = NULL; 01229 } 01230 }
virtual void SendToKeyListener::lookupFinished | ( | AbstractLookup * | lookup | ) | [inline, virtual] |
Implements LookupListener.
Definition at line 1232 of file BaseOverlay.cc.
01232 { 01233 if (dynamic_cast<BaseRouteMessage*>(msg)) { 01234 BaseRouteMessage* routeMsg = static_cast<BaseRouteMessage*>(msg); 01235 if (lookup->isValid()) { 01236 if (lookup->getResult().size()==0) { 01237 EV << "[SendToKeyListener::lookupFinished()]\n" 01238 " [ERROR] SendToKeyListener: Valid result, " 01239 "but empty array." << endl; 01240 } else { 01241 routeMsg->setHopCount(routeMsg->getHopCount() 01242 + lookup->getAccumulatedHops()); 01243 01244 for (uint32_t i=0; i<lookup->getResult().size(); i++) { 01245 overlay->sendRouteMessage(lookup->getResult()[i], 01246 static_cast<BaseRouteMessage*> 01247 (routeMsg->dup()), 01248 overlay->routeMsgAcks); 01249 } 01250 } 01251 } else { 01252 EV << "[SendToKeyListener::lookupFinished()]\n" 01253 << " Lookup failed - dropping message" 01254 << endl; 01255 //std::cout << simTime() << " " 01256 // << routeMsg->getSrcNode() 01257 // << " [SendToKeyListener::lookupFinished()]\n" 01258 // << " Lookup failed - dropping message" 01259 // << std::endl; 01260 RECORD_STATS(overlay->numDropped++; 01261 overlay->bytesDropped += routeMsg->getByteLength()); 01262 } 01263 } else if (dynamic_cast<LookupCall*>(msg)) { 01264 LookupCall* call = static_cast<LookupCall*>(msg); 01265 LookupResponse* response = new LookupResponse(); 01266 response->setKey(call->getKey()); 01267 response->setHopCount(lookup->getAccumulatedHops()); 01268 if (lookup->isValid()) { 01269 response->setIsValid(true); 01270 response->setSiblingsArraySize(lookup->getResult().size()); 01271 for (uint32_t i=0; i<lookup->getResult().size(); i++) { 01272 response->setSiblings(i, lookup->getResult()[i]); 01273 } 01274 if (lookup->getResult().size() == 0) { 01275 EV << "[SendToKeyListener::lookupFinished() @ " 01276 << overlay->thisNode.getAddress() 01277 << " (" << overlay->thisNode.getKey().toString(16) << ")]\n" 01278 << " LookupCall " 01279 << call->getNonce() 01280 << " failed! (size=0)" << endl; 01281 } 01282 } else { 01283 response->setIsValid(false); 01284 EV << "[SendToKeyListener::lookupFinished() @ " 01285 << overlay->thisNode.getAddress() 01286 << " (" << overlay->thisNode.getKey().toString(16) << ")]\n" 01287 << " LookupCall " 01288 << call->getNonce() 01289 << " failed!" << endl; 01290 } 01291 overlay->sendRpcResponse(call, response); 01292 msg = NULL; 01293 } else { 01294 throw cRuntimeError("SendToKeyListener::lookupFinished(): " 01295 "Unknown message type!"); 01296 } 01297 delete this; 01298 }
Definition at line 1214 of file BaseOverlay.cc.
Referenced by SendToKeyListener().
BaseOverlayMessage* SendToKeyListener::msg [private] |
Definition at line 1213 of file BaseOverlay.cc.
Referenced by lookupFinished(), and ~SendToKeyListener().
BaseOverlay* SendToKeyListener::overlay [private] |
Definition at line 1212 of file BaseOverlay.cc.
Referenced by lookupFinished(), and ~SendToKeyListener().