This class contains all send messages and their timestamp. More...
#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 |
This class contains all send messages and their timestamp.
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().
{
assert(!(msg->getID().isUnspecified()));
std::vector<GiaNode> remainNodes;
// push all neighbors except the node where message was comming from
// to remainNodes
for ( uint32_t i=0; i<neighbors->getSize(); i++ ) {
if ( neighbors->get(i).getKey() != msg->getSrcNode().getKey())
remainNodes.push_back(neighbors->get(i));
}
MessageItem messageItem;
messageItem.remainNodes = remainNodes;
messageItem.timestamp = simTime();
messages[msg->getID()] = messageItem;
}
| bool GiaMessageBookkeeping::contains | ( | GiaIDMessage * | msg | ) |
| msg | This is a GiaIDMessage |
Definition at line 69 of file GiaMessageBookkeeping.cc.
Referenced by Gia::forwardMessage().
| NodeHandle GiaMessageBookkeeping::getNextHop | ( | GiaIDMessage * | msg | ) |
| msg | This is a GiaIDMessage |
Definition at line 78 of file GiaMessageBookkeeping.cc.
Referenced by Gia::forwardMessage().
{
if ( neighbors->getSize() > 0 ) {
std::map<OverlayKey, MessageItem>::iterator it = messages.find(msg->getID());
std::priority_queue<FullGiaNodeInfo, std::vector<FullGiaNodeInfo>, GiaNodeQueueCompare> nodeQueue;
if ( it != messages.end() && it->first == msg->getID() ) {
MessageItem messageItem = it->second;
std::vector<GiaNode> remNodes = messageItem.remainNodes;
if ( remNodes.size() == 0) {
for ( uint32_t i=0; i<neighbors->getSize(); i++ ) {
remNodes.push_back(neighbors->get(i));
}
}
for ( uint32_t i=0; i<remNodes.size(); i++ ) {
if(!(remNodes[i].isUnspecified())) {
FullGiaNodeInfo temp;
temp.node = remNodes[i];
temp.info = neighbors->get(temp.node);
if (temp.info) nodeQueue.push(temp);
}
}
if (!nodeQueue.empty()) {
NodeHandle nextHop = nodeQueue.top().node;
GiaNeighborInfo* nextHopInfo = neighbors->get(nextHop);
nodeQueue.pop();
if (nextHopInfo != NULL && nextHopInfo->receivedTokens > 0 ) {
remNodes.clear();
while ( !nodeQueue.empty() ) {
remNodes.push_back(nodeQueue.top().node);
nodeQueue.pop();
}
messageItem.remainNodes = remNodes;
messageItem.timestamp = simTime();
messages[msg->getID()] = messageItem;
return nextHop;
}
}
}
}
return NodeHandle::UNSPECIFIED_NODE;
}
| uint32_t GiaMessageBookkeeping::getSize | ( | ) |
Definition at line 39 of file GiaMessageBookkeeping.cc.
{
return messages.size();
}
| void GiaMessageBookkeeping::removeMessage | ( | GiaIDMessage * | msg | ) |
Removes GiaMessage from MessageBookkeeping.
| msg | This is a GiaIDMessage |
Definition at line 61 of file GiaMessageBookkeeping.cc.
| void GiaMessageBookkeeping::removeTimedoutMessages | ( | ) |
Removes timedout messages from list.
Definition at line 124 of file GiaMessageBookkeeping.cc.
Referenced by Gia::handleTimerEvent().
{
std::map<OverlayKey, MessageItem>::iterator it = messages.begin();
std::map<OverlayKey, MessageItem>::iterator it2 = messages.begin();
for ( uint32_t i=0; i<messages.size(); i++) {
OverlayKey key = it->first;
MessageItem messageItem = it->second;
it2 = it++;
if (simTime() > (messageItem.timestamp + timeout))
messages.erase(it2);
}
}
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] |
Definition at line 109 of file GiaMessageBookkeeping.h.
Referenced by removeTimedoutMessages().
1.7.1