package org.jgroups.blocks;
import org.jgroups.Address;
/**
* Interface defining when a group request is done. This allows for termination of a group request based on
* logic implemented by the caller. Example: caller uses mode GET_FIRST plus a RspFilter implementation. Here, the
* request will not return (assuming timeout is 0) when the first response has been received, but when the filter
* passed
* @author Bela Ban
*/
public interface RspFilter {
/**
* Determines whether a response from a given sender should be added to the response list of the request
* @param response The response (usually a serializable value)
* @param sender The sender of response
* @return True if we should add the response to the response list ({@link org.jgroups.util.RspList}) of a request,
* otherwise false. In the latter case, we don't add the response to the response list.
*/
boolean isAcceptable(Object response, Address sender);
/**
* Right after calling {@link #isAcceptable(Object, org.jgroups.Address)}, this method is called to see whether
* we are done with the request and can unblock the caller
* @return False if the request is done, otherwise true
*/
boolean needMoreResponses();
}