RPC.CALL (connection.ID, procedure, #args, MAT arg.list, #values,
MAT return.list)
RPC.CALL 関数を使用すると、接続しているサーバーへの要求を作成できます。 要求は C クライアントの RPC ライブラリーを使用してパッケージ化され、サーバーに送信されます。 RPC.CALL 関数はリモート要求の処理結果を返します。つまり成功すれば 1 を、失敗すれば 0 を返します。
connection.ID は、RPC 要求を出す開かれたサーバー接続のハンドルです。 RPC.CONNECT 関数は、connection.ID を取得します。
procedure は、サーバーで要求された処理を識別するストリングです。
#args は、RPC サーバーに渡される arg.list のエレメント数です。
arg.list は、RPC サーバーに渡される入力引数を含んだ 2 次元配列 (マトリックス) です。この配列の各エレメントは、値の順序ペアです。 1 番目の値はサーバーの処理を表す引数の個数、2 番目の値は引数型宣言子です。(データのタイプを指定すれば、データ・タイプを区別するさまざまなサーバーで RPC インターフェースを使用できます。)
#values は、サーバーによって返される値の数です。
return.list は、RPC.CALL によって返されるリモート処理の結果を含む 1 次元配列です。arg.list と同様に、結果は、順番に並べられた値のペアです。
RPC.CALL は、RPC パケットを #args と arg.list から作成します。C クライアント RPC ライブラリーにある関数がパケットをサーバーに送信し、サーバーからの応答を待ちます。応答が返ると、RPC パケットはエレメントに分離されて、配列 return.list に保存されます。
RPC.CALL 関数に続いて STATUS 関数を実行すると、次のような処理結果を確認できます。
次の例では、fred が所有するジョブを探します。サーバーへの接続には RPC.CONNECT 関数を使用します。
args (1,1) = "fred"; args (1,2) = UVRPC.STRING
IF (RPC.CALL (server.handle, "COUNT.USERS", 1, MAT
args,
return.count, MAT res)) ELSE
PRINT "COUNT.JOBS request failed, error code is: "
STATUS()
GOTO close.connection:
END