public class Rci
extends java.lang.Object
RCIサーバのIPアドレスとポート番号を指定しconnect後、遠隔クラス生成、遠隔メソッド実行を行う。
リスナー登録することでサーバからの非同期通知を受けることもできる。
メソッドコールは非同期ではないからRCIクライアントは基本的に同期通信である。複数のメソッドコールを スレッドでやりたい場合は、Rciのインスタンスをそれぞれのスレッドで動かすこと。 (RciServerはsshと同じように同じユーザでの複数同時接続を禁止していない。)
修飾子とタイプ | クラスと説明 |
---|---|
protected class |
Rci.EventReceiver
サーバからの非同期通知を受け取るクラス
|
class |
Rci.Invoker
1つのコネクションの送受信を行う(Rci内部で使用するクラス)
|
修飾子とタイプ | フィールドと説明 |
---|---|
protected Rci.Invoker |
invoker
1つのコネクションの送受信を行う。
|
protected boolean |
isThrowException
RCIサーバで発生した例外をシリアライズして受け、その例外を送出する場合はtrueにする。
|
protected boolean |
isUseEventListener
サーバからの非同期イベントの受信処理を有効にする場合はtrueにする。
|
protected java.util.HashMap<java.lang.Integer,java.util.EventListener> |
listenerMap
RCIサーバからの非同期通知を受け取るクラスを保持する。
|
protected int |
listenerNumber
RCIサーバからの非同期通知を受け取るインスタンスの番号(登録されるごとにインクリメントする)
|
static java.lang.String |
logFileNameEnv
ログファイル名を変更する場合の環境変数名
|
static java.lang.String |
logLevelEnv
ログレベルを変更する場合の環境変数名
|
protected java.net.Socket |
socket
クライアントソケット
|
コンストラクタと説明 |
---|
Rci()
デフォルトコンストラクタ、Rciクライアントを生成する
|
修飾子とタイプ | メソッドと説明 |
---|---|
void |
authUser(java.lang.String username,
java.lang.String password,
java.lang.String hashAlgorithm,
int hashRepeat)
鍵の交換を行いログインする。
|
void |
connect(java.lang.String server,
int port)
RCIサーバのソケットに接続する。
|
void |
disconnect()
ソケットを切断する。
|
Packet |
exec(Packet result,
java.lang.Object... objects)
invokeで生成したインスタンス(かシングルトン)のメソッドを実行する。
|
Packet |
execType(Packet result,
java.lang.Class<?>[] paramTypes,
java.lang.Object... objects)
パラメータの型を指定してinvokeで生成したインスタンス(かシングルトン)のメソッドを実行する。
|
Rci.Invoker |
getInvoker()
RCIサーバとのコネクションにより通信を行うInvokerクラスのインスタンスを取得する。
|
Packet |
invoke(java.lang.Object... objects)
サーバ側でクラス生成か参照の取得かstaticメソッドを遠隔実行する。
|
Packet |
invokeCertificateUser(java.lang.String username,
java.lang.String password,
java.lang.String hashAlgorithm,
int hashRepeat)
ログインする。
|
Packet |
invokeExchangeKey()
公開鍵をサーバに送信し、共通鍵を受け取る。
|
protected void |
invokeListener(Packet req)
サーバからの非同期通知に対応するリスナークラスをクライアントで実行する。
|
Packet |
invokeType(java.lang.Class<?>[] paramTypes,
java.lang.Object... objects)
invokeのパラメータの前にパラメータの型を指定し、サーバ側でクラス生成か参照の取得かstaticメソッドを遠隔実行する。
|
Packet |
invokeUpdatePassword(java.lang.String hashAlgorithmName,
java.lang.String loginPassword,
java.lang.String registPassword,
int loginCount,
int registCount,
java.lang.String pubKey)
パスワードを変更する。
|
boolean |
isThrowException()
サーバで例外が発生した際にクライアントでも例外を送出する場合はtrue、例外を送出しない場合はfalseが返る。
|
boolean |
isUseEventListener()
サーバからの非同期通知を受けられる状態かを返す。
|
Packet |
registListener(Packet result,
java.lang.Class<?>[] paramTypes,
java.util.EventListener clientRunListener,
java.lang.Object... objects)
パラメータの型を指定し、サーバ側でリスナー登録し、そのリスナーからの通知を受け取るクラスを登録する。
|
Packet |
registListener(Packet result,
java.util.EventListener clientRunListener,
java.lang.Object... objects)
サーバ側でリスナー登録し、そのリスナーからの通知を受け取るリスナーを登録する。
|
void |
setCryptKeyPair(java.lang.String publicKey,
java.lang.String secretKey)
公開鍵と秘密鍵に独自に生成したものを設定する。
|
void |
setThrowException(boolean isThrowException)
サーバで例外が発生した際にクライアントでも例外を送出するかを設定する。
|
void |
setUseEventListener(boolean isUseEventListener)
サーバからの非同期通知を受けられる状態かを設定する。
|
protected void |
startReadThread()
1つのコネクションの送受信を行うスレッドを起動する。
|
protected void |
updateLogSetup()
ログファイル名、ログレベルを環境変数から設定する場合はこのメソッドを呼び出す。
|
public static final java.lang.String logFileNameEnv
public static final java.lang.String logLevelEnv
protected java.net.Socket socket
protected Rci.Invoker invoker
protected boolean isThrowException
protected boolean isUseEventListener
protected int listenerNumber
protected java.util.HashMap<java.lang.Integer,java.util.EventListener> listenerMap
public boolean isUseEventListener()
public void setUseEventListener(boolean isUseEventListener)
isUseEventListener
- 非同期通知を受けられる状態ならtrue。同期通信のみで無限待ちにする場合はfalseprotected void updateLogSetup()
public void connect(java.lang.String server, int port) throws java.net.UnknownHostException, java.io.IOException
server
- RCIサーバのホスト名かIPアドレスport
- RCIサーバのポート番号java.net.UnknownHostException
- ホストが見つからない場合java.io.IOException
- 何らかの通信に失敗した場合protected void startReadThread()
public boolean isThrowException()
public void setThrowException(boolean isThrowException)
isThrowException
- サーバで例外が発生した際にクライアントでも例外を送出する場合はtruepublic Rci.Invoker getInvoker()
public Packet invoke(java.lang.Object... objects) throws java.lang.Exception
第1パラメータが実行するクラスの種類を表しており、以下の3種類がある。
new: インスタンスクラスの生成
static: スタティッククラスのメソッドの実行
single: シングルトンクラスへの参照の取得
第2パラメータはクラスの完全修飾名を設定する。例)"java.util.HashMap"
第3パラメータ以降は第1パラメータにより以下になる。
new: コンストラクタのパラメータがあれば、それを与える。
static: メソッド名に続きパラメータがあれば、それを与える。
single: インスタンスを取得するメソッド名に続きパラメータがあれば、それを与える。
例)
new: Packet date = rci.invoke("new", "java.util.Date");
static: Packet result = rci.invoke("static", "java.lang.System", "getProperty","user.dir");
single: Packet singleton = rci.invoke("single", "example.Singleton", "getInstance");
objects
- 上記形式の可変パラメータjava.lang.Exception
- 何らかの例外public Packet invokeType(java.lang.Class<?>[] paramTypes, java.lang.Object... objects) throws java.lang.Exception
パラメータの型を与えた方が適合するメソッドをより正確に見つけられる。
paramTypes
- パラメータの型。例) intなら{int.class}のようにする。objects
- 可変パラメータjava.lang.Exception
- 何らかの例外public void authUser(java.lang.String username, java.lang.String password, java.lang.String hashAlgorithm, int hashRepeat) throws java.lang.Exception
username
- ユーザ名password
- パスワードhashAlgorithm
- ハッシュアルゴリズム名(MD2, MD5, SHA-1, SHA-256, SHA-384, SHA-512の何れか)hashRepeat
- パラメータとして与えられたパスワードに対して更にハッシュ化を繰り返す数java.lang.Exception
- 何らかの例外HashCrypt
public void setCryptKeyPair(java.lang.String publicKey, java.lang.String secretKey)
サーバ側で公開鍵が登録されていると、ここで与えた公開鍵と一致判定を行う。公開鍵と秘密鍵はRSAKeyPairCryptで生成する。
publicKey
- 公開鍵secretKey
- 秘密鍵RSAKeyPairCrypt
public Packet invokeExchangeKey() throws java.lang.Exception
java.lang.Exception
- 何らかの例外public Packet invokeCertificateUser(java.lang.String username, java.lang.String password, java.lang.String hashAlgorithm, int hashRepeat) throws java.lang.Exception
username
- ユーザ名password
- パスワードhashAlgorithm
- ハッシュアルゴリズム名hashRepeat
- パラメータとして与えられたパスワードに対して更にハッシュ化を繰り返す数java.lang.Exception
- 何らかの例外public Packet invokeUpdatePassword(java.lang.String hashAlgorithmName, java.lang.String loginPassword, java.lang.String registPassword, int loginCount, int registCount, java.lang.String pubKey) throws java.lang.Exception
hashAlgorithmName
- ハッシュアルゴリズム名loginPassword
- ログイン時のパスワードregistPassword
- 登録するパスワードloginCount
- ログイン時のハッシュ繰り返し回数registCount
- 登録するパスワードのハッシュ繰り返し回数pubKey
- 公開鍵java.lang.Exception
- 何らかの例外public Packet exec(Packet result, java.lang.Object... objects) throws java.lang.Exception
例)
new: date = rci.exec(date, "getMonth");
single: singleton = rci.exec(singleton, "setNameAndAge", "Yamada", 21);
インスタンスの破棄はメソッド名以降なしで実行する。
例)
rci.exec(date);
rci.exec(singleton);
result
- invokeかinvokeTypeの返却値のPacketobjects
- メソッド名、その後はパラメータjava.lang.Exception
- 何らかの例外public Packet execType(Packet result, java.lang.Class<?>[] paramTypes, java.lang.Object... objects) throws java.lang.Exception
result
- invokeかinvokeTypeの返却値のPacketparamTypes
- パラメータの型objects
- メソッド名、その後はパラメータjava.lang.Exception
- 何らかの例外public Packet registListener(Packet result, java.util.EventListener clientRunListener, java.lang.Object... objects) throws java.lang.Exception
result
- invokeかinvokeTypeの返却値のPacketclientRunListener
- クライアント側でコールバックされるリスナーobjects
- メソッド名、その後はパラメータjava.lang.Exception
- 何らかの例外public Packet registListener(Packet result, java.lang.Class<?>[] paramTypes, java.util.EventListener clientRunListener, java.lang.Object... objects) throws java.lang.Exception
result
- invokeかinvokeTypeの返却値のPacketparamTypes
- パラメータの型clientRunListener
- クライアント側でコールバックされるリスナーobjects
- メソッド名、その後はパラメータjava.lang.Exception
- 何らかの例外public void disconnect() throws java.io.IOException
java.io.IOException
- 通信例外protected void invokeListener(Packet req) throws java.lang.Exception
req
- サーバから受け取ったPacketjava.lang.Exception
- 何らかの例外