| Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]()
|
| 付録F 動的スケルトンインタフェースのプログラミング | > F.1 C言語の開発 |
ゲートウェイでは、以下に示す処理を行います。
CORBA_ServerRequest_op_name()により、メソッド名の解析を行います。下の例ではゲートウェイ関数としてstaticな関数を使用していますが、staticである必要はありません。ゲートウェイ関数の第1引数はサーバオブジェクトリファレンス、第2引数はServerRequestオブジェクト、第3引数は例外情報を設定するためのenv構造体です。
static void
dsi(
CORBA_Object obj,
CORBA_ServerRequest request,
CORBA_Environment *env )
{
CORBA_Identifier dsi_op_name;
dsi_op_name = CORBA_ServerRequest_op_name(
request,
env );
if( strcmp( dsi_op_name, "calculate" ) == 0 )
method_calculate( request, env );
CORBA_free( dsi_op_name );
return;
}
CORBA_ORB_create_list()により、サーバアプリケーションに渡すパラメタを格納するための領域を保持するリストオブジェクト(NVListオブジェクト)を生成します。パラメタとして、何個のパラメタを格納するかを指定します。リストオブジェクトのオブジェクトリファレンスが返されます。
CORBA_NVList arg_list; CORBA_ORB_create_list( orb, 2, &arg_list, env );
CORBA_NVList_add_item()により、サーバアプリケーションに渡すパラメタをリストオブジェクトに設定します。パラメタには、CORBA_NVListオブジェクトリファレンス、サーバアプリケーションのパラメタの名前、型、値および長さを指定します。
CORBA_NVList_add_item(
arg_list,
"a", TC_long, NULL,
sizeof( CORBA_long ),
CORBA_ARG_IN,
env );
CORBA_NVList_add_item(
arg_list,
"b", TC_long, NULL,
sizeof( CORBA_long ),
CORBA_ARG_IN,
env );
CORBA_ServerRequest_params()により、パラメタの解析を行います。
CORBA_ServerRequest_params(
dsi_request,
arg_list,
env );
CORBA_ServerRequest_result()により、復帰情報の設定を行います。
CORBA_long a, b;
ODdemo_calculator_result *res;
CORBA_any any_value;
a = *(long *)(arg_list[0].argument._value );
b = *(long *)(arg_list[1].argument._value );
if( b == 0 ){
CORBA_ServerRequest_exception(
dsi_request,
CORBA_USER_EXCEPTION,
ex_ODdemo_calculator_ZEROPARAM,
NULL,
env );
return;
}
res = ODdemo_calculator_result_alloc();
res->add_result = a+b;
res->subtract_result = a/b;
res->multiple_result = a*b;
res->divide_result = (CORBA_float)a/b;
any_value._type = TC_ODdemo_calculator_result;
any_value._value = res;
CORBA_ServerRequest_result(
dsi_request,
any_value,
env );
CORBA_ServerRequest_exception()を発行して、例外情報の設定を行います。
目次
索引
![]()
|