package lsr.paxos;

/**
 * Intended to be a class for controlling retransmitted messages.
 * 
 * Single object controls one message.
 * 
 * Lets stopping message retransmission to one destination, or to all.
 * 
 * The beginning of message re-sending should begin before (or as) the object is
 * created.
 */

public interface RetransmittedMessage {

    /**
     * Starts retransmitting to specified destination. If the retransmitter has
     * been stopped (by calling <code>stop()</code> method or by stopping all
     * destinations), the retransmitting will not be started again.
     * 
     * @param destination - the id of processes to transmit message again
     */
    void start(int destination);

    /**
     * Stops retransmitting message to specified process. After this method is
     * called, retransmitted message will not be send to
     * <code>destination</code>.
     * 
     * @param destination - id of replica
     */
    void stop(int destination);

    /**
     * Stops retransmitting a message. No more message will be sent.
     */
    void stop();
}
