/** * File: GroupMembershipService.idl * Content: CORBA specification of members with reliable multicast * communications, based on the virtual synchronous model * Author: LuisM Pena * Date: 3nd July 2000 * Version: 0.95.00, 4th September 2001 * Last changes: * v0.95: GroupMember receives the event changingView when the view got blocked * **/ #ifndef VIRTUAL_SYNCHRONY_IDL #define VIRTUAL_SYNCHRONY_IDL module sensei { module middleware { module gms { /***********************************************************************/ /************************* GROUP MEMBER ID *****************************/ /***********************************************************************/ /** * 0 is considered an invalid member id **/ typedef long GroupMemberId; const GroupMemberId INVALID_GROUP_MEMBER_ID = 0; /** * List of group member ids **/ typedef sequence <GroupMemberId> GroupMemberIdList; /***********************************************************************/ /************************* VIEW ****************************************/ /***********************************************************************/ /** * View, as defined in the virtual synchrony model. Every * group member shares the same view of the group **/ struct View { long viewId; GroupMemberIdList members; GroupMemberIdList newMembers; GroupMemberIdList expulsedMembers; }; /***********************************************************************/ /************************* MESSAGE *************************************/ /***********************************************************************/ valuetype Message { }; /***********************************************************************/ /************************* GROUP HANDLER *******************************/ /***********************************************************************/ /** * GroupHandler defines the interface that allows to the application to * make group communications. */ interface GroupHandler { /** * Returns the GroupMemberId handled by this GroupHandler * If the member is not active, the returned value is random - negative. **/ GroupMemberId getGroupMemberId(); /** * Returns true if the member belong to a group **/ boolean isValidGroup(); /** * Leaves the group * @returns true if the member was belonging to a group **/ boolean leaveGroup(); /** * Sends a message to every member in the view, returning * true if the message is sent on this view * @param message The message to send * @returns true if the message is sent on the current view **/ boolean castMessage(in Message msg); /** * Sends a message to the specified member in the view, returning * true if the message is sent on this view. This call allows * to keep the order between cast and point-to-point messages * @param target The member receiving the message * @param message The message to send * @returns true if the message is sent on the current view **/ boolean sendMessage(in GroupMemberId target, in Message msg); }; /***********************************************************************/ /************************* GROUP MEMBER ********************************/ /***********************************************************************/ /** * GroupMember specifies the interface to be implemented by group members */ interface GroupMember { /** * The member receives a point to point message to be processed * @param message The message to process **/ void processPTPMessage(in GroupMemberId sender, in Message msg); /** * The member receives a group message to be processed * @param message The message to process **/ void processCastMessage(in GroupMemberId sender, in Message msg); /** * The member is accepted in the group, and receives its identity and the * first view. It receives as well the group handler to use for communications **/ void memberAccepted(in GroupMemberId identity, in GroupHandler handler, in View theView); /** * The group is going to change the view, any new message will be sent on the next view **/ void changingView(); /** * The member receives a new view, including the list of members * @param message The message to process **/ void installView(in View theView); /** * The member is excluded from the group, because it has requested it or because * it's considered to be faulty. **/ void excludedFromGroup(); }; }; }; }; #endif