#include <GiaMessageBookkeeping.h>
Classes | |
| class | GiaNodeQueueCompare |
| struct | MessageItem |
Public Member Functions | |
| GiaMessageBookkeeping (GiaNeighbors *neighbors, uint32_t timeout) | |
| Constructor. | |
| ~GiaMessageBookkeeping () | |
| Destructor. | |
| uint32_t | getSize () |
| void | addMessage (GiaIDMessage *msg) |
| Add GiaMessage to MessageBookkeeping. | |
| void | removeMessage (GiaIDMessage *msg) |
| Removes GiaMessage from MessageBookkeeping. | |
| bool | contains (GiaIDMessage *msg) |
| NodeHandle | getNextHop (GiaIDMessage *msg) |
| void | removeTimedoutMessages () |
| Removes timedout messages from list. | |
Protected Attributes | |
| std::map< OverlayKey, MessageItem > | messages |
| contains all sent messages | |
| GiaNeighbors * | neighbors |
| pointer to our neighbor list | |
| uint32_t | timeout |
It is used for timing out old messages and for biased random walk.
Definition at line 42 of file GiaMessageBookkeeping.h.
| GiaMessageBookkeeping::GiaMessageBookkeeping | ( | GiaNeighbors * | neighbors, | |
| uint32_t | timeout | |||
| ) |
Constructor.
| neighbors | Pointer to neighbors-list | |
| timeout | Value for timing out old messages |
Definition at line 30 of file GiaMessageBookkeeping.cc.
| GiaMessageBookkeeping::~GiaMessageBookkeeping | ( | ) |
| void GiaMessageBookkeeping::addMessage | ( | GiaIDMessage * | msg | ) |
Add GiaMessage to MessageBookkeeping.
| msg | This is a GiaIDMessage |
Definition at line 44 of file GiaMessageBookkeeping.cc.
Referenced by Gia::forwardMessage().
00045 { 00046 assert(!(msg->getID().isUnspecified())); 00047 00048 std::vector<GiaNode> remainNodes; 00049 // push all neighbors except the node where message was comming from 00050 // to remainNodes 00051 for ( uint32_t i=0; i<neighbors->getSize(); i++ ) { 00052 if ( neighbors->get(i).getKey() != msg->getSrcNode().getKey()) 00053 remainNodes.push_back(neighbors->get(i)); 00054 } 00055 MessageItem messageItem; 00056 messageItem.remainNodes = remainNodes; 00057 messageItem.timestamp = simTime(); 00058 messages[msg->getID()] = messageItem; 00059 }
| bool GiaMessageBookkeeping::contains | ( | GiaIDMessage * | msg | ) |
| msg | This is a GiaIDMessage |
Definition at line 69 of file GiaMessageBookkeeping.cc.
Referenced by Gia::forwardMessage().
00070 { 00071 std::map<OverlayKey, MessageItem>::iterator it = messages.find(msg->getID()); 00072 00073 if(it != messages.end()) 00074 return true; 00075 return false; 00076 }
| NodeHandle GiaMessageBookkeeping::getNextHop | ( | GiaIDMessage * | msg | ) |
| msg | This is a GiaIDMessage |
Definition at line 78 of file GiaMessageBookkeeping.cc.
Referenced by Gia::forwardMessage().
00079 { 00080 if ( neighbors->getSize() > 0 ) { 00081 std::map<OverlayKey, MessageItem>::iterator it = messages.find(msg->getID()); 00082 std::priority_queue<FullGiaNodeInfo, std::vector<FullGiaNodeInfo>, GiaNodeQueueCompare> nodeQueue; 00083 00084 if ( it != messages.end() && it->first == msg->getID() ) { 00085 MessageItem messageItem = it->second; 00086 std::vector<GiaNode> remNodes = messageItem.remainNodes; 00087 if ( remNodes.size() == 0) { 00088 for ( uint32_t i=0; i<neighbors->getSize(); i++ ) { 00089 remNodes.push_back(neighbors->get(i)); 00090 } 00091 } 00092 00093 for ( uint32_t i=0; i<remNodes.size(); i++ ) { 00094 if(!(remNodes[i].isUnspecified())) { 00095 FullGiaNodeInfo temp; 00096 temp.node = remNodes[i]; 00097 temp.info = neighbors->get(temp.node); 00098 if (temp.info) nodeQueue.push(temp); 00099 } 00100 } 00101 00102 if (!nodeQueue.empty()) { 00103 NodeHandle nextHop = nodeQueue.top().node; 00104 GiaNeighborInfo* nextHopInfo = neighbors->get(nextHop); 00105 nodeQueue.pop(); 00106 00107 if (nextHopInfo != NULL && nextHopInfo->receivedTokens > 0 ) { 00108 remNodes.clear(); 00109 while ( !nodeQueue.empty() ) { 00110 remNodes.push_back(nodeQueue.top().node); 00111 nodeQueue.pop(); 00112 } 00113 messageItem.remainNodes = remNodes; 00114 messageItem.timestamp = simTime(); 00115 messages[msg->getID()] = messageItem; 00116 return nextHop; 00117 } 00118 } 00119 } 00120 } 00121 return NodeHandle::UNSPECIFIED_NODE; 00122 }
| uint32_t GiaMessageBookkeeping::getSize | ( | ) |
Definition at line 39 of file GiaMessageBookkeeping.cc.
00040 { 00041 return messages.size(); 00042 }
| void GiaMessageBookkeeping::removeMessage | ( | GiaIDMessage * | msg | ) |
Removes GiaMessage from MessageBookkeeping.
| msg | This is a GiaIDMessage |
Definition at line 61 of file GiaMessageBookkeeping.cc.
00062 { 00063 std::map<OverlayKey, MessageItem>::iterator it = messages.find(msg->getID()); 00064 // delete message if key is equal 00065 if ( it->first == msg->getID() ) 00066 messages.erase(messages.find(msg->getID())); 00067 }
| void GiaMessageBookkeeping::removeTimedoutMessages | ( | ) |
Removes timedout messages from list.
Definition at line 124 of file GiaMessageBookkeeping.cc.
Referenced by Gia::handleTimerEvent().
00125 { 00126 std::map<OverlayKey, MessageItem>::iterator it = messages.begin(); 00127 std::map<OverlayKey, MessageItem>::iterator it2 = messages.begin(); 00128 for ( uint32_t i=0; i<messages.size(); i++) { 00129 OverlayKey key = it->first; 00130 MessageItem messageItem = it->second; 00131 it2 = it++; 00132 if (simTime() > (messageItem.timestamp + timeout)) 00133 messages.erase(it2); 00134 } 00135 }
std::map<OverlayKey, MessageItem> GiaMessageBookkeeping::messages [protected] |
contains all sent messages
Definition at line 107 of file GiaMessageBookkeeping.h.
Referenced by addMessage(), contains(), getNextHop(), getSize(), removeMessage(), and removeTimedoutMessages().
GiaNeighbors* GiaMessageBookkeeping::neighbors [protected] |
pointer to our neighbor list
Definition at line 108 of file GiaMessageBookkeeping.h.
Referenced by addMessage(), and getNextHop().
uint32_t GiaMessageBookkeeping::timeout [protected] |
1.5.8