/*
 * $Id: OQSConnection.java,v 1.4 2005/10/18 16:22:05 rampil Exp $
 * Copyright (c) 2004 LOGICAL-PARADOX.ORG
 */
package org.logical_paradox.rss.oqs4r;

import java.io.Serializable;
import java.rmi.Remote;
import java.rmi.RemoteException;

/**
 * ObjectQueueServerに接続するためのクライアントインターフェース
 * @author  satoshi akabane@logical-paradox.org
 * @version $Revision: 1.4 $
 */
public interface OQSConnection extends Remote {
	/**
	 * キューにオブジェクトを追加する
	 * @param o キューに追加するオブジェクト
	 * @throws RemoteException 追加中に発生した例外
	 */
	public void add(Serializable o) throws RemoteException;
	/**
	 * キューにオブジェクトを追加する
	 * @param objs キューに追加するオブジェクトの配列
	 * @throws RemoteException 追加中に発生した例外
	 */
	public void add(Serializable[] objs) throws RemoteException;
	/**
	 * キューに次の要素があるかどうかを調べる
	 * @return true:ある / false:ない
	 * @throws RemoteException 調査中に発生した例外
	 */
	public boolean hasNext() throws RemoteException;
	/**
	 * 次のオブジェクトを取得する
	 * 次のオブジェクトが存在しない場合はnullを返す
	 * 
	 * @return 取得できたオブジェクト
	 * @throws RemoteException 取得中に発生した例外
	 */
	public Serializable next() throws RemoteException;
	/**
	 * 次のオブジェクトを取得する
	 * 
	 * @param blocking true:取得可能なオブジェクトが追加されるまで待機 / false:取り出すオブジェクトがない場合はすぐ処理を返す
	 * @return 取得できたオブジェクト
	 * @throws RemoteException 取得中に発生した例外
	 */
	public Serializable next(boolean blocking) throws RemoteException;
	/**
	 * 次のオブジェクトを取得する
	 * 次のオブジェクトが存在しない場合はnullを返す
	 * @param count 一度に取得するオブジェクト数
	 * @return 取得できたオブジェクト
	 * @throws RemoteException 取得中に発生した例外
	 */
	public Serializable[] next(int count) throws RemoteException;
	/**
	 * 次のオブジェクトを取得する
	 * @param count 一度に取得するオブジェクト数
	 * @param blocking true:取得可能なオブジェクトが追加されるまで待機 / false:取り出すオブジェクトがない場合はすぐ処理を返す
	 * @return 取得できたオブジェクト
	 * @throws RemoteException 取得中に発生した例外
	 */
	public Serializable[] next(int count, boolean blocking) throws RemoteException;
	/**
	 * この接続を破棄する．
	 * @throws RemoteException 破棄に失敗した(しかし接続はちゃんと破棄される)
	 */
	public void close() throws RemoteException;
}
