イベントファクトリを使用してイベントチャネルを作成するプログラムの例と処理の流れを以下に説明します。
イベントサービスの場合
アプリケーションとイベントチャネルの動的生成のシーケンスを以下に示します。
[イベントファクトリによるイベントチャネルの生成(C言語の場合)]
CORBA_Boolean func() { CORBA_ORB orb; EventFactory factory; CosEventChannelAdmin_EventChannel channel; CORBA_Environment env; EventFactory_Option opt; factory = CORBA_ORB_resolve_initial_references( orb, EventFactory_ObjectId_Factory, &env ); /* 1 */ opt.max_queuing = 3000; opt.life_time = 0; opt.model = EventFactory_ModelAny; channel = EventFactory_create( factory, "keyword", &opt, &env ); /* 2 */ CosEventChannelAdmin_EventChannel_destroy( channel, &env ); /* 3 */ .... }
イベントファクトリのオブジェクトリファレンスをイニシャルサービスから獲得します。イニシャルサービスには「EventFactory_ObjectId_Factory」を指定してください。
EventFactory_create()メソッドでイベントファクトリにイベントチャネルの生成を指示します。複数のプロセス間で、同一のイベントチャネルのオブジェクトリファレンスを獲得するには、EventFactory_create()メソッドに同一キーワードを指定します。これにより、異なるプロセス間のイベント通信を行うことができます。このキーワードは、動的生成したイベントチャネルの名前です。
イベントチャネルが不要である場合は、CosEventChannelAdmin_EventChannel_destroy()メソッドで、イベントチャネルを破壊します。
[イベントファクトリによるイベントチャネルの生成(C++言語の場合)]
CORBA::ORB_ptr orb; CORBA::Object_ptr obj; CORBA::Environment env; EventFactory_ptr factory; EventFactory::Option *option; CosEventChannelAdmin::EventChannel_ptr event_ch; try { obj = orb->resolve_initial_references( EventFactory::ObjectId_Factory, env ); /* 1 */ factory = EventFactory::_narrow( obj ); CORBA::release( obj ); option = new EventFactory::Option(); option->max_queuing = 100; option->life_time = 60; option->model = EventFactory::ModelAny; event_ch = factory->create( "keyword", option, env ); /* 2 */ .... event_ch->destroy( env ); /* 3 */ } catch( CORBA::Exception &e ) { .... }
イベントファクトリのオブジェクトリファレンスをイニシャルサービスから獲得します。イニシャルサービスには「EventFactory::ObjectId_Factory」を指定してください。
EventFactory::create()メソッドでイベントファクトリにイベントチャネルの生成を指示します。複数のプロセス間で、同一のイベントチャネルのオブジェクトリファレンスを獲得するには、EventFactory::create()メソッドに同一キーワードを指定します。これにより、異なるプロセス間のイベント通信を行うことができます。このキーワードは動的生成したイベントチャネルの名前です。
イベントチャネルが不要である場合は、CosEventChannelAdmin::EventChannel::destroy()メソッドで、イベントチャネルを破壊します。
ノーティフィケーションサービスの場合
アプリケーションとイベントチャネルの動的生成のシーケンスを以下に示します。
[イベントファクトリによるイベントチャネルの生成(C言語の場合)]
CORBA_Boolean func() { CORBA_ORB orb; CosNotifyChannelAdmin_EventChannelFactory factory; CosNotifyChannelAdmin_EventChannel channel; CosNotification_QoSProperties *initial_qos; CosNotification_AdminProperties *initial_admin; CosNotifyChannelAdmin_ChannelID channelID; CORBA_Environment env; factory = CORBA_ORB_resolve_initial_references( orb, "NotificationService", &env ); /* 1 */ channel = CosNotifyChannelAdmin_EventChannelFactory_create_channel( factory, initial_qos, initial_admin, &channelID, &env ); /* 2 */ .... CosEventChannelAdmin_EventChannel_destroy( channel, &env ) /* 3 */ .... }
イベントファクトリのオブジェクトリファレンスをイニシャルサービスから獲得します。イニシャルサービスには、“NotificationService”を指定してください。
CosNotifyChannelAdmin_EventChannelFactory_create_channel()メソッドでイベントファクトリにイベントチャネルの生成を指示します。イベントチャネルが生成されると、idにイベントチャネルの識別IDが指定されます。複数のプロセス間で同一のイベントチャネルのオブジェクトリファレンスを獲得するには、ノーティフィケーションサービスインタフェースのEventChannelFactoryインタフェースのget_event_channel()メソッドで同一の識別IDを指定して取得します。これにより、異なるプロセス間のイベント通信を行うことができます。
イベントチャネルが不要である場合は、CosEventChannelAdmin_EventChannel_destroy()メソッドで、イベントチャネルを破壊します。
[イベントファクトリによるイベントチャネルの生成(C++言語の場合)]
CORBA::ORB_ptr orb; CORBA::Object_ptr obj; CORBA::Environment env; CosNotifyChannelAdmin::EventChannelFactory_ptr factory; CosNotification::QoSProperties initial_qos; CosNotification::AdminProperties initial_admin; CosNotifyChannelAdmin::ChannelID id; CosNotifyChannelAdmin::EventChannel_ptr event_ch; try { obj = orb->resolve_initial_references("NotificationService",env); /* 1 */ factory = CosNotifyChannelAdmin::EventChannelFactory::_narrow( obj ); CORBA::release( obj ); event_ch = factory->create_channel( &initial_qos, &initial_admin, &id, env ); /* 2 */ .... event_ch->destroy( env ); /* 3 */ } catch( CORBA::Exception &e ) { .... }
イベントファクトリのオブジェクトリファレンスをイニシャルサービスから獲得します。イニシャルサービスには、“NotificationService”を指定してください。
CosNotifyChannelAdmin::EventChannelFactory::create_channel()メソッドでイベントファクトリにイベントチャネルの生成を指示します。イベントチャネルが生成されると、idにイベントチャネルの識別IDが指定されます。複数のプロセス間で同一のイベントチャネルのオブジェクトリファレンスを獲得するには、ノーティフィケーションサービスインタフェースのEventChannelFactoryインタフェースのget_event_channel()メソッドで同一の識別IDを指定して取得します。これにより、異なるプロセス間のイベント通信を行うことができます。
イベントチャネルが不要である場合は、CosEventChannelAdmin::EventChannel::destroy()メソッドで、イベントチャネルを破壊します。