Inheritance diagram for SendToKeyListener:
Public Member Functions | |
SendToKeyListener (BaseOverlay *overlay, BaseOverlayMessage *msg) | |
~SendToKeyListener () | |
virtual void | lookupFinished (AbstractLookup *lookup) |
Private Attributes | |
BaseOverlay * | overlay |
BaseOverlayMessage * | msg |
GlobalStatistics * | globalStatistics |
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 }
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 }
BaseOverlay* SendToKeyListener::overlay [private] |
BaseOverlayMessage* SendToKeyListener::msg [private] |