/* * File: MoversightService.h * Author: jgaebler * * Created on May 27, 2011, 9:19 AM */ #pragma once #ifndef MOVERSIGHTSERVICE_H #define MOVERSIGHTSERVICE_H #include "common/Defines.h" #include "common/container/PeerList.h" #include "common/container/PeerIDList.h" #include "common/transport/TransportAddress.h" #include "event/ObjectListener.h" namespace ubeeme { namespace moversight { class Dispatcher; class Moversight; class MoversightMessage; class NFDMessage; class MoversightTimer; class VirtualLogicalTime; class ExteriorMessage; class UnicastMessage; class MulticastMessage; class InteriorMessage; /** * @class MoversightService * @author Jan Gäbler * @ingroup Moversight * @brief Defines a common interface for a moversight module. */ class MoversightService : public ObjectListener { friend class MoversightTimer; public: MoversightService(Dispatcher & d, std::string name); MoversightService(const MoversightService & other); virtual ~MoversightService(); /** * @brief Initialize the service. Called to setup the defined service. */ virtual void initialise() = 0; /** * @brief Finalize the module. Clean and stop the running module service. */ virtual void finalise() = 0; MoversightService & operator=(const MoversightService & other); virtual const PeerState & getLocalPeerState() const; virtual const State & getLocalState() const; virtual const SubState & getLocalSubState() const; virtual const StateOperation & getLocalStateOperation() const; virtual const State & getState(PeerID id) const; virtual const SubState & getSubState(PeerID id) const; virtual const StateOperation & getStateOperation(PeerID id) const; virtual const VirtualLogicalTime & getCurrentLogicalTime() const; virtual const VirtualLogicalTime & getLastSeenLogicalTime() const; virtual ViewID getViewID() const; virtual ViewID getLastViewID() const; protected: virtual PeerIDList getMasterIDList(); virtual Peer & getLocalPeer(); virtual const Peer & getLocalPeer() const; virtual PeerID getLocalID(); virtual TransportAddress const & getLocalAddress(); virtual PeerID getLocalMasterID() const; virtual bool isLocalPeerMaster(); virtual void setLocalState(const State & s); virtual void setLocalSubState(const SubState & sub); virtual void setLocalStateOperation(const StateOperation & op); virtual void setState(PeerID id, const State & s); virtual void setSubState(PeerID id, const SubState & sub); virtual void setStateOperation(PeerID id, const StateOperation & op); virtual PeerIDList createReceiverList(PeerID sourcePeerID); /** * Common interface for PDU send operations */ virtual void sendTo(const MoversightMessage& msg, const TransportAddress& dest, const bool reliable = false); virtual void sendTo(const MoversightMessage& msg, const PeerID dest, const bool reliable = false); virtual void sendTo(const MoversightMessage& msg, const PeerIDList& peers, const bool reliable = false); virtual void sendToCluster(const MoversightMessage& msg, const bool reliable = false); virtual void sendToMaster(const MoversightMessage& msg, const bool reliable = false); virtual void sendToAllMasters(const MoversightMessage& msg, const bool reliable = false); virtual void sendToLastView(const MoversightMessage& msg, const PeerID dest, const bool reliable = false); virtual void sendToLastView(const MoversightMessage& msg, const PeerIDList& peers, const bool reliable = false); protected: /** * @brief Reference to the moversight dispatcher. */ Dispatcher & dispatcher; /** * @brief Reference to the moversight module. */ Moversight & module; private: virtual PeerState & getLocalPeerState(); virtual PeerState & getPeerState(PeerID id); virtual const PeerState & getPeerState(PeerID id) const; }; } } #endif /* MOVERSIGHTSERVICE_H */