package lsr.paxos.network;

import java.util.BitSet;

import lsr.paxos.messages.Message;

/**
 * Implementations of this interface should always return quickly and in no
 * condition should block. Suggestion: enqueue the message in a local queue, so
 * it can be processed asynchronously.
 */
public interface MessageHandler {
    /**
     * This method should execute quickly and in no condition should block.
     * Suggestion: enqueue the message in a local queue, so it can be processed
     * asynchronously.
     * 
     * @param msg The message received.
     * @param sender The sender of the message
     */
    public void onMessageReceived(Message msg, int sender);

    /**
     * Callback method which is called every time new message was sent by the
     * network. We do not have the guarantee that the message reaches the
     * destinations.
     * 
     * @param message - message that was sent.
     * @param destinations - processes to which message was sent
     */

    public void onMessageSent(Message message, BitSet destinations);
}
