RPC.CALL 関数

構文

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 パケットを #argsarg.list から作成します。C クライアント RPC ライブラリーにある関数がパケットをサーバーに送信し、サーバーからの応答を待ちます。応答が返ると、RPC パケットはエレメントに分離されて、配列 return.list に保存されます。

RPC.CALL 関数に続いて STATUS 関数を実行すると、次のような処理結果を確認できます。

81001
不特定の原因によって接続が切断された場合。
81002
connection.ID が、有効なバウンド接続に一致しません。
81004
伝送パケットに引数を保存しようとしてエラーが発生しました。
81005
RPC バージョンの不一致のためにプロシージャーへアクセスが拒否されました。
81008
arg.list 内の無効なパラメーターのためにエラーが発生しました。
81009
不明な RPC エラーです。
81010
#args が、リモート・マシン上の期待された引数の数に一致しません。
81015
サーバーからの応答を待機する間にタイムアウトが発生した場合。

次の例では、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