package com.limegroup.gnutella.search;
import org.limewire.io.GUID;
import com.limegroup.gnutella.ReplyHandler;
import com.limegroup.gnutella.connection.RoutedConnection;
import com.limegroup.gnutella.messages.QueryRequest;
public interface QueryHandler {
/**
* The number of results to try to get if we're an Ultrapeer originating
* the query.
*/
public static final int ULTRAPEER_RESULTS = 150;
/**
* Constant for the maximum number of milliseconds the entire query
* can last. The query expires when this limit is reached.
*/
public static final int MAX_QUERY_TIME = 200 * 1000;
/** Gets the query used for building new queries. */
public QueryRequest getTemplateQueryRequest();
/**
* Convenience method for creating a new query with the given TTL
* with this <tt>QueryHandler</tt>.
*
* @param ttl the time to live for the new query
*/
public QueryRequest createQuery(byte ttl);
/**
* Sends the query to the current connections. If the query is not
* yet ready to be processed, this returns immediately.
*/
public void sendQuery();
/**
* Sends a query to the specified host.
*
* @param query the <tt>QueryRequest</tt> to send
* @param mc the <tt>RoutedConnection</tt> to send the query to
* @return the number of new hosts theoretically hit by this query
*/
public int sendQueryToHost(QueryRequest query, RoutedConnection mc);
/**
* Returns whether or not this query has received enough results.
*
* @return <tt>true</tt> if this query has received enough results,
* <tt>false</tt> otherwise
*/
public boolean hasEnoughResults();
/**
* Use this to modify the number of results as reported by the leaf you are
* querying for.
*/
public void updateLeafResults(int numResults);
/**
* Returns the number of results as reported by the leaf. At least 0.
*/
public int getNumResultsReportedByLeaf();
/**
* Accessor for the <tt>ReplyHandler</tt> instance for the connection
* issuing this request.
*
* @return the <tt>ReplyHandler</tt> for the connection issuing this
* request
*/
public ReplyHandler getReplyHandler();
/**
* Accessor for the time to wait per hop, in milliseconds,
* for this QueryHandler.
*
* @return the time to wait per hop in milliseconds for this
* QueryHandler
*/
public long getTimeToWaitPerHop();
/** @return simply returns the guid of the query this is handling.
*/
public GUID getGUID();
}