千代様
産総研 安藤です
> 慶応義塾大学の千代と申します。
>
> Service Portを用いて非同期でリモートオブジェクトの呼出しを
> したいと考えています。
>
> 具体的には、Service Portから非同期でリモートオブジェクトの関数を
> 呼出して、その処理が終わったらイベントをPushする。
>
> 呼出元がイベントを受け取ったら、呼出元のオブジェクトで
> あらかじめ登録しておいたイベントハンドラの関数を
> 実行するというような手順を考えています。
>
> 戻り値の書き込みはデータポートのようにコールバックオブジェクトで
> OnWriteConvert関数を利用するような形で実装することを考えています。
>
> Service Portで非同期呼出しをするにはどのように実装すれば
> よいのでしょうか。
現在のOpenRTMではそのようなことを行う標準的な方法はありません。
しかしながら、サービスポートをうまく使えば、おっしゃるようなことは実現可能です。
まず、前提として、一つのポートにはプロバイダインターフェースとコンシューマ
インターフェースを任意の数だけ持たせることが可能です。
あるサービスポートののプロバイダ側で、
interface MyService
{
oneway void do();
};
という、サービスプロバイダを持たせ、かつ同じポートに、
interface Callback
{
void done();
};
のような、コンシューマを持たせます。
サービスコンシューマの方は、これと逆にプロバイダとコンシューマを持たせます。
つまり、
- MyService のコンシューマ
- Callbackのプロバイダ
を持つことになります。
これらのプロバイダとコンシューマはポートを接続することにより相互に接続されます。
MyServiceのプロバイダ側では、do()の処理が終わったら、
そのコンシューマのdone()を呼んでやることで、呼び出し側に
処理が終わったことを知らせることが可能です。
このような方法でどうでしょうか?
慶応義塾大学の千代と申します。
Service Portを用いて非同期でリモートオブジェクトの呼出しを
したいと考えています。
具体的には、Service Portから非同期でリモートオブジェクトの関数を
呼出して、その処理が終わったらイベントをPushする。
呼出元がイベントを受け取ったら、呼出元のオブジェクトで
あらかじめ登録しておいたイベントハンドラの関数を
実行するというような手順を考えています。
戻り値の書き込みはデータポートのようにコールバックオブジェクトで
OnWriteConvert関数を利用するような形で実装することを考えています。
Service Portで非同期呼出しをするにはどのように実装すれば
よいのでしょうか。
よろしくお願いします。