129 lines
4.6 KiB
C++
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 */
|
|
|