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

129 lines
4.6 KiB
C++

/*
* File: MergeService.h
* Author: jgaebler
*
* Created on November 16, 2011, 3:50 PM
*/
#pragma once
#ifndef MERGESERVICE_H
#define MERGESERVICE_H
#include "common/transport/MoversightMessageTypes.h"
#include "common/Defines.h"
#include "common/MoversightService.h"
#include "ms/MemberRegister.h"
#include "ms/placingstrategy/PeerPlacingStrategyType.h"
namespace ubeeme {
namespace moversight {
class MergeRequest;
class MergeConfirm;
class MergeReject;
class MergeRoster;
class MergeAnnounce;
class MergeAbort;
class MergeFlush;
class MergeFinish;
class MergeRejectToInviteeTimer;
class MergeAbortToInviterGroupTimer;
class MergeAbortToInviteeGroupTimer;
class MergeAbortTimer;
class MergeRollbackTimer;
class MergeOperation;
class PeerIDList;
class MulticastMessage;
#if OMNETPP
class TransportAddress;
#endif
/**
* @brief Defines a merge service for the moversight protocol. The services enables the application
* to merge two groups to a new one.
* @class MergeService
* @author Jan Gäbler
* @ingroup Moversight
*/
class MergeService : public MoversightService {
friend class MergeRejectToInviteeTimer;
friend class MergeAbortToInviteeGroupTimer;
friend class MergeAbortToInviterGroupTimer;
friend class MergeAbortTimer;
friend class MergeRollbackTimer;
public:
MergeService(Dispatcher & d);
virtual ~MergeService();
virtual void initialise();
virtual void finalise();
void mergeGroup(const TransportAddress & ta);
void responseMerge();
void cancelMerge(const std::string & reason);
void handleEvent(const FlushDoneEvent & e);
void handleMergeRequest(MergeRequest * msg);
void handleMergeConfirm(MergeConfirm * msg);
void handleMergeReject(MergeReject * msg);
void handleMergeRoster(MergeRoster * msg);
void handleMergeAnnounceMessage(MergeAnnounce & ma, const PeerIDList & missedPeers);
void handleMergeAbortMessage(MergeAbort & mab, const PeerIDList & missedPeers);
void handleMergeFlushMessage(MergeFlush & mfl, const PeerIDList & missedPeers);
void handleMergeFinishMessage(MergeFinish & mef, const PeerIDList & missedPeers);
void handleMergeRejectToInviteeTimer(MergeRejectToInviteeTimer * timer);
void handleMergeAbortToInviteeGroupTimer(MergeAbortToInviteeGroupTimer * timer);
void handleMergeAbortToInviterGroupTimer(MergeAbortToInviterGroupTimer * timer);
void handleMergeAbortTimer(MergeAbortTimer * timer);
void handleMergeRollbackTimer(MergeRollbackTimer * timer);
private:
MemberRegister createNewMemberRegisterAfterMerge(const Roster & ro, bool inviterGroup, const PeerPlacingStrategyType & peerPlacing);
void createAndStartMergeRejectToInviteeTimer(const TransportAddress & ta, const MergeOperation & merge);
void createAndStartMergeAbortToInviteeGroupTimer();
void createAndStartMergeAbortToInviterGroupTimer();
void createAndStartMergeAbortTimer(MulticastMessage & mm);
void createAndStartMergeRollbackTimer(const MoversightMessageType messageType);
void stopAndDeleteMergeRejectToInviteeTimer();
void stopAndDeleteMergeAbortToInviteeGroupTimer();
void stopAndDeleteMergeAbortToInviterGroupTimer();
void stopAndDeleteMergeAbortTimer();
void stopAndDeleteMergeRollbackTimer();
void stopAndDeleteAllTimers();
void sendMergeRequest(const TransportAddress & ta);
void sendMergeConfirm(const TransportAddress & ta);
void sendMergeReject(const TransportAddress & ta, const std::string & message);
void sendMergeRoster(const TransportAddress & ta);
MergeRejectToInviteeTimer * mergeRejectToInviteeTimer;
MergeAbortToInviteeGroupTimer * mergeAbortToInviteeGroupTimer;
MergeAbortToInviterGroupTimer * mergeAbortToInviterGroupTimer;
MergeAbortTimer * mergeAbortTimer;
MergeRollbackTimer * mergeRollbackTimer;
MergeOperation * currentMerge;
TransportAddress otherMergeDirectorTA;
PeerID oldPeerID;
bool mergeDirector;
bool inviterMergeDirector;
};
}
}
#endif /* MERGESERVICE_H */