KLIC側での利用方法
コンパイル
jk ディレクトリにある、
jk.kl1, jkmain.kl1, jkinput.kl1, jkspool.kl1,
jkwrapstr.kl1, jkparse.kl1, jkinspector.kl1
の各ファイルを、インタフェースを利用するプログラムといっしょにコンパイルしてください。
初期設定
まず、KLICのUNIXインターフェースでソケットを作成し、Java側と接続済みのものを用意します。これに対して、 jk:jk/2を用いて、メッセージインタフェースを作成します。このゴールは、
jk -Stream +Sock
のようになっており、Streamにインタフェースへのストリームを返します。Sockには接続済みのソケットを指定します。例えば、以下のように利用します。
p1 :-
unix:unix([bind(inet(9007),Serv]),
p2(Serv).
p2(S) :- normal(Serv) |
jk:jk(JK, Serv),
JK = [get(Data)].
このようにして作成したメッセージインタフェースへのストリームに対して、以下に示すようなメッセージを送ることにより、メッセージ通信が行えるようになります。
インタフェースの利用
以下のメッセージを、作成したインタフェースへのストリームに送ることによりそれぞれの操作が行えます。
インタフェースの終了
以下のメッセージをインタフェース送ることにより、インタフェースは終了します。これらのメッセージを送らないで、インタフェースが閉じられた場合は、Java側からインタフェースが終了されるまで、インタフェースの処理が継続します。
-
- close
- メッセージインタフェースを閉じる。同時に、インタフェースに利用しているソケットを閉じる。
-
- auto_close
- メッセージインタフェースへのストリームを閉じて、かつ、オブジェクトへのストリームが全て閉じられたときに、自動的にメッセージインタフェースを終了し、ソケットを閉じる。このメッセージは、オブジェクト操作のインタフェースのみを用いるときに有用である。
データストリーム
データストリームのインタフェースを利用するには、以下のメッセージを利用すます。
-
- put +Data
- データストリームを通じて、Data に指定されたデータを送信する。
-
- get -Ret
- データストリームに送られたデータを受け取る。
Retには、normal(Data)の形式で設定される。また、ソケットが閉じられた場合などは、abnormal(abnormal) が設定される。
オブジェクト操作
オブジェクトを作成するには、まず、以下の形式のメッセージを送ります。なお、利用するクラスのコンストラクタ、メソッドやフィールドは、publicアクセスにして、インタフェースからのアクセスが出来るようにしておく必要があります。
-
- instance +ClassName +Args -Ret
- Javaのオブジェクトを作成する。
ClassNameには、作成するクラスの名前を文字列で指定する。Argsには、コンストラクタの引数をリスト形式で指定する。Retには、オブジェクトが生成された場合、normal(Stream)の形でストリームが返される。このストリームには、以下で述べるオブジェクト操作のためのメッセージを送ることが出来る。また、オブジェクト作成に失敗した場合、Retにはabnormal(ErrorMessage)の形でエラーメッセージが返される。
呼び出されるコンストラクタは、まず、引数の型が全てDataクラスであるものが探される。見つからなかった場合には、引数で与えたデータが整数であるならばint型に、文字列であるならば、Stringクラスに変換して、適用できるものを探す。
上記のメッセージで作成したオブジェクトに対して、操作を行う場合は、以下であげるメッセージを用います。なお、以下のメッセージの処理の実行は、オブジェクトごとに、逐次的に行われ、前の処理が終了するまで、次の処理が待たされます。オブジェクトが異なれば、その処理は並列に行われます。
-
- method +MethodName +Args -Ret
- オブジェクトのメソッドを呼び出す。
MethodNameに呼び出すメソッド名を文字列で指定する。Argsには、メソッド呼び出しの引数をリスト形式で渡す。Retには、メソッド呼び出しが成功した場合に、その戻り値をnormal(Data)の形式で返す。呼び出しに失敗した場合は、abnormal(ErrorMessage)の形でエラーメッセージが帰される。
呼び出されるメソッドは、まず、引数の型が全てDataクラスであるものが探される。見つからなかった場合には、引数で与えたデータが整数であるならばint型に、文字列であるならば、Stringクラスに変換して、適用できるものを探す。
戻り値のクラスが、Dataクラスのオブジェクトでなかった場合、もし、それがStringクラスのオブジェクトか、int型であった場合は、戻り値は正しく変換されて得ることが出来る。それ以外は、エラーとなる。
-
- get +FieldName -Ret
- フィールドの値を参照する。
FieldNameには、参照するフィールド名を文字列で指定する。Retには、フィールドの値が、normal(Data)の形式で返される。フィールドの参照に失敗した場合は、abnormal(ErrorMessage)の形でエラーメッセージが帰される。
フィールドのクラスが、Dataクラスでなかった場合、もし、それがStringクラスか、int型であった場合は、戻り値は正しく変換されて得ることが出来る。それ以外は、エラーとなる。
-
- set +FieldName +Data -Ret
- フィールドの値を設定する。
FieldNameには、設定するフィールド名を文字列で指定する。Dataには設定するデータを指定する。Retには、フィールドに正しく設定されると、normalが設定される。フィールドの設定に失敗した場合は、abnormal(ErrorMessage)の形でエラーメッセージが帰される。
設定するフィールドが、Dataクラスでなかった場合、もし、それがStringクラスか、int型であって、設定する値が同じ型であれば、値は正しく変換されて設定される。それ以外は、エラーとなる。
クラスメソッド(Staticメソッド)や、クラスフィールド(Staticフィールド)に対する操作は、以下のメッセージをインタフェースに送ることにより実現されます。これらのメッセージを処理するために、別々のスレッドが生成されるため、処理は、並列に実行される。同期処理が必要な場合には、これらのメッセージの戻り値を利用してください。
-
- class_method +ClassName +MethodName +Args -Ret
- クラスメソッドを呼び出す。
ClassNameに呼び出すクラスの名前を文字列で指定する。MethodNameに呼び出すメソッド名を文字列で指定する。Argsには、メソッド呼び出しの引数をリスト形式で渡す。Retには、メソッド呼び出しが成功した場合に、その戻り値をnormal(Data)の形式で返す。呼び出しに失敗した場合は、abnormal(ErrorMessage)の形でエラーメッセージが帰される。
呼び出されるメソッドは、まず、引数の型が全てDataクラスであるものが探される。見つからなかった場合には、引数で与えたデータが整数であるならばint型に、文字列であるならば、Stringクラスに変換して、適用できるものを探す。
戻り値のクラスが、Dataクラスのオブジェクトでなかった場合、もし、それがStringクラスのオブジェクトか、int型であった場合は、戻り値は正しく変換されて得ることが出来る。それ以外は、エラーとなる。
-
- class_field_get +ClassName +FieldName -Ret
- フィールドの値を参照する。
ClassNameにクラスの名を文字列で指定する。FieldNameには、参照するフィールド名を文字列で指定する。Retには、フィールドの値が、normal(Data)の形式で返される。フィールドの参照に失敗した場合は、abnormal(ErrorMessage)の形でエラーメッセージが帰される。
参照するフィールドが、Dataクラスのオブジェクトでなかった場合、もし、それがStringクラスのオブジェクトか、int型であった場合は、戻り値は正しく変換されて得ることが出来る。それ以外は、エラーとなる。
-
- class_field_set +ClassName +FieldName +Data -Ret
- フィールドの値を設定する。
ClassNameにクラスの名を文字列で指定する。FieldNameには、設定するフィールド名を文字列で指定する。Dataには設定するデータを指定する。Retには、フィールドに正しく設定されると、normalが設定される。フィールドの設定に失敗した場合は、abnormal(ErrorMessage)の形でエラーメッセージが帰される。
設定するフィールドが、Dataクラスのオブジェクトでなかった場合、もし、それがStringクラスのオブジェクトか、int型であった場合は、値は正しく変換されて設定される。それ以外は、エラーとなる。