/**
* Kandata
* Copyright (C) 2003. Yoshinori Watanabe
* 
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
* 
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
* 
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/
package kandata.client;

//import java.net.*;
import kandata.KandataServerException;

/**
 * サーバとの通信に使われるコネクタ.
 * クライアントアプリはこのインターフェースを介して、サーバとやり取りを
 * 行います。
 *
 */
public interface KandataConnector {

	/** 接続 */
//	protected void connect(URL url) throws KandataClientException;

	/**
	 * サーバ側に切断したことを通知します.
	 * クライアントアプリケーションが終了するときは、必ずこれを呼んでください。
	 */
	public void disconnect() throws KandataClientException, KandataServerException;

	/**
	 * サーバ側に格納されているクライアントのリソースを取得します.
	 * ファイルの中身をそのままバイト配列で返します。
	 * 例えば、画像として取得するには以下のようにします。
	 * <pre>
	 *		byte[] imagedata = connector.getResource("/symbol.png");
	 *		ImageIcon icon = new ImageIcon(imagedata);
	 * </pre>
	 * @param	path	クライアントリソースパスからの相対パス名（先頭にFile.separatorが必要です）
	 * @return	ファイルの中身
	 */
	public byte[] getResource(String path) throws KandataClientException, KandataServerException;

	/**
	 * サーバ側のアプリケーションメソッドを呼び出します.
	 * @param	command	任意の文字列を指定します。ただし、先頭に'@'を付けることはできません。
	 * @param	args	コマンドの引数です。引数が不要な場合は <code>null</code> で構いません。
	 */
	public Object invoke(String command, Object[] args)
							throws KandataClientException, KandataServerException;

	/** エントリのクラスを取得する. */
//	protected Class getEntryClass() throws KandataClientException;

	/** エントリのクラス名を取得する. */
//	protected String getEntryClassName() throws KandataClientException;

	/*
	 * もし、１つのサーバで複数のクライアントをサポートしたいのであれば、
	 * 引数に、クライアントアプリケーション名を渡す。
	 * もし、さらにそのバージョンを指定したいのであれば、第２引数で渡す。
	 * 第２引数が省略された場合は、サーバはデフォルトのバージョンのアプリを渡す。
	 * COMのProgIDと同じ考え方。
	 バージョンアップに対する仕組みは検討中。サーバ側@getClassでバージョンにあわせて
	 ディレクトリを分ける。
	protected String getEntryClassName(String appname, String version) throws KandataClientException;
	*/
	/** サーバから取得するクラスローダを定義します */
//	public ClassLoader getClassLoader() throws KandataClientException;

}
