Files
scandocs/uni/masterarbeit/source/moversight/mt/MessageTransfer.h
2014-06-30 13:58:10 +02:00

124 lines
4.0 KiB
C++

/*
* File: MessageTransfer.h
* Author: jgaebler
*
* Created on May 4, 2010, 5:18 PM
*/
#pragma once
#ifndef _MESSAGETRANSFER_H
#define _MESSAGETRANSFER_H
#include "LTNodeQueue.h"
#include "MulticastMessageQueue.h"
#include "common/time/VirtualLogicalTime.h"
#include "timer/MTTimerQueue.h"
#include "common/container/PeerList.h"
#include "common/MoversightService.h"
namespace ubeeme {
namespace moversight {
class MulticastMessage;
class Dispatcher;
class MessageReference;
class MembershipService;
class TimeService;
class Moversight;
class MTTimer;
class Peer;
class MulticastMessage;
class LTMessage;
class GTMessage;
/**
* @class MessageTransfer
* @brief Provides a virtual synchrony send service based on the MOVS.
* @ingroup Moversight
* @author Jan Gäbler
*/
class MessageTransfer : public MoversightService {
friend class MTTimer;
friend class LTTimer;
friend class GTTimer;
friend class GTAwaitTimer;
friend class GarbageTimer;
public:
MessageTransfer(Dispatcher & d);
virtual ~MessageTransfer();
virtual void initialise();
virtual void finalise();
void send( MulticastMessage& msg);
void handleMessage( MulticastMessage* pdu);
void handleMessage(LTMessage * pdu);
void handleMessage(GTMessage * pdu);
void handleGarbageTimer(MTTimer * timer);
void handleGTTimer(MTTimer * timer);
void handleLTTimer(MTTimer * timer);
void handleGTAwaitTimer(MTTimer * timer);
void localPeerUpdated(Peer & localPeer);
void handleEvent(const PeerLeftEvent & e);
MessageTransfer & operator=(const MessageTransfer & other);
virtual const VirtualLogicalTime & getLastSeenLogicalTime() const;
private:
void enqueue( const MulticastMessage& pdu);
void updateQueue( const MoversightMessage& pdu);
void sortAndDeliver();
void cleanMessageQueues();
MTTimer * setupTimer(MTTimer* timer, MessageReference & mRef, PeerID missedPeer, const VirtualLogicalTime & aLt);
MTTimer * setupTimer(MTTimer* timer, MessageReference & mRef, PeerIDList & missingPeers, const VirtualLogicalTime & aLt);
void createAndStartGTAwaitTimer(MessageReference & mRef, const VirtualLogicalTime & alt);
void createAndStartGTTimer(MessageReference & messageRef, const VirtualLogicalTime & alt);
void createAndStartGarbageTimer(MessageReference & mRef);
void stopAllTimers();
MTTimer * stopLTGTOrGarbageTimer( const MessageReference & mRef);
void stopAndDeleteTimer(MessageReference & mRef);
void updateTimer( const MoversightMessage* const pdu);
void updateTimer( MTTimer* const timer, const MoversightMessage* const pdu);
void updateMessage( MulticastMessage* msg, VirtualLogicalTime& aLt, MTTimer* timer);
void updateMissingPeersInLastMessageQueue( const MoversightMessage* const pdu);
bool resendMessageToPeers( MTTimer* const timer);
void resendLTMessageToPeer(MessageReference & mRef);
void resendGTMessageToPeer( const MessageReference& mref, const LTMessage* const pdu);
void copyMissingPeersAndForeignMissingPeersToMessage(MoversightMessage * pdu, MTTimer * timer);
bool isLTCollectingCompleted( const MessageReference & mRef);
bool isPrimaryMaster(PeerID lastHop);
MembershipService & ms();
TimeService & ts();
VirtualLogicalTime lastSeenLt;
LTNodeQueue queue;
MTTimerQueue timerQueue;
MTTimerQueue gtAwaitTimerQueue;
MulticastMessageQueue lastMessageQueue;
unsigned int sequ;
};
}
}
#endif /* _MESSAGETRANSFER_H */