172 # include <iostream.h>
175 #ifdef HAVE_STD_IOSTREAM
189 #include "omniEvents.hh"
192 static void usage(
int argc,
char **argv);
193 static void appendCriterion( CosLifeCycle::Criteria&,
const char*,
const char*);
203 CORBA::ORB_var
orb = CORBA::ORB_init(argc,argv);
207 bool needNameService =
false;
208 const char* channelName =
"EventChannel";
209 const char* factoryName =
"EventChannelFactory";
210 CosLifeCycle::Criteria criteria;
213 while ((c =
getopt(argc,argv,
"n:N:m:c:i:p:q:R:r:t:vh")) != EOF)
219 needNameService=
true;
272 needNameService=(needNameService ||
optind>=argc);
277 const char* action =
"start";
280 CORBA::Object_var obj;
284 CosNaming::NamingContext_var rootContext=CosNaming::NamingContext::_nil();
286 action=
"resolve initial reference 'NameService'";
287 obj=
orb->resolve_initial_references(
"NameService");
288 rootContext=CosNaming::NamingContext::_narrow(obj);
289 if(CORBA::is_nil(rootContext))
290 throw CORBA::OBJECT_NOT_EXIST();
292 catch (CORBA::Exception& ex) {
296 cerr<<
"Warning - failed to "<<action<<
"."<<endl;
304 action=
"convert URI from command line into object reference";
309 action=
"find Event Channel Factory in naming service";
310 obj=rootContext->resolve(
str2name(factoryName));
313 action=
"narrow object reference to event channel factory";
314 omniEvents::EventChannelFactory_var factory =
315 omniEvents::EventChannelFactory::_narrow(obj);
316 if(CORBA::is_nil(factory))
318 cerr <<
"Failed to narrow Event Channel Factory reference." << endl;
323 action=
"check factory supports EventChannel object interface";
324 CosLifeCycle::Key key;
326 key[0].id = CORBA::string_dup(
"EventChannel");
327 key[0].kind = CORBA::string_dup(
"object interface");
329 if(!factory->supports(key))
331 cerr <<
"Factory does not support Event Channel Interface! [\""
332 << factoryName <<
"\"]" << endl;
338 action=
"create EventChannel object";
339 CORBA::Object_var channelObj =factory->create_object(key, criteria);
340 if (CORBA::is_nil(channelObj))
342 cerr <<
"Channel Factory returned nil reference! [\""
343 << channelName <<
"\"]" << endl;
348 CosEventChannelAdmin::EventChannel_var channel =
349 CosEventChannelAdmin::EventChannel::_narrow(channelObj);
350 if (CORBA::is_nil(channel))
352 cerr <<
"Failed to narrow Event Channel! [\""
353 << channelName <<
"\"]" << endl;
360 CORBA::String_var sior =
orb->object_to_string(channel);
361 cout<<sior.in()<<endl;
366 if(!CORBA::is_nil(rootContext))
368 CosNaming::Name name =
str2name(channelName);
370 action=
"register (bind) EventChannel with the naming service";
371 rootContext->bind(name,channel.in());
373 catch(CosNaming::NamingContext::AlreadyBound& ex) {
374 action=
"register (rebind) EventChannel with the naming service";
375 rootContext->rebind(name,channel.in());
381 action=
"destroy orb";
389 catch (CosLifeCycle::NoFactory& ex) {
390 cerr<<
"Failed to create Event Channel: NoFactory"
391 " (interface not supported) "<<endl;
393 catch (CosLifeCycle::CannotMeetCriteria& ex) {
394 cerr<<
"Failed to create Event Channel: CannotMeetCriteria "<<endl;
396 catch (CosLifeCycle::InvalidCriteria& ex) {
397 cerr<<
"Failed to create Event Channel: InvalidCriteria "<<endl;
399 catch (CORBA::COMM_FAILURE& ex) {
400 cerr<<
"System exception, unable to "<<action<<
": COMM_FAILURE"<<endl;
402 catch (CORBA::SystemException& ex) {
403 cerr<<
"System exception, unable to "<<action;
404 #if defined(HAVE_OMNIORB4)
405 cerr<<
" "<<ex._name();
406 if(ex.NP_minorString())
407 cerr<<
" ("<<ex.NP_minorString()<<
")";
411 catch (CORBA::Exception& ex) {
412 cerr<<
"CORBA exception, unable to "<<action
418 catch (omniORB::fatalException& ex) {
419 cerr<<
"Fatal Exception, unable to "<<action<<endl;
429 "\nCreate an EventChannel and register it in the naming service.\n"
430 "syntax: "<<(argc?argv[0]:
"eventc")<<
" OPTIONS [FACTORY_URI]\n"
432 "FACTORY_URI: The factory may be specified as a URI.\n"
433 " This may be an IOR, or a corbaloc::: or corbaname::: URI.\n"
434 " For example: corbaloc::localhost:11169/omniEvents\n"
436 "OPTIONS: DEFAULT:\n"
437 " -n channel name [\"EventChannel\"]\n"
438 " -N factory name (if URI is not specified) [\"EventChannelFactory\"]\n"
439 " -c override default CyclePeriod_ns of new channel (nanoseconds)\n"
440 " -i set the InsName of new channel, to enable access via corbaloc\n"
441 " -p override default MaxNumProxies of new channel\n"
442 " -q override default MaxQueueLength of new channel\n"
443 " -R override default PullRetryPeriod_ms for new channel (milliseconds)\n"
444 " -t set an event type filter, FilterId=<RepositoryId>\n"
445 " -v print the IOR of the new EventChannel to standard output.\n"
446 " -h display this help text\n"
447 "OLD OPTIONS: (only used by omniEvents v2.4 and earlier)\n"
448 " -m override default MaxEventsPerConsumer for new channel\n" << endl;
452 CosLifeCycle::Criteria& criteria,
457 CORBA::ULong criteriaLen =criteria.length();
459 criteria.length(criteriaLen);
460 criteria[criteriaLen-1].name=CORBA::string_dup(name);
461 criteria[criteriaLen-1].value<<=CORBA::ULong(atol(value));
465 CosLifeCycle::Criteria& criteria,
470 CORBA::ULong criteriaLen =criteria.length();
472 criteria.length(criteriaLen);
473 criteria[criteriaLen-1].name=CORBA::string_dup(name);
474 criteria[criteriaLen-1].value<<=value;
int getopt(int argc, char *argv[], const char *optionS)
CosNaming::Name str2name(const char *namestr)
Converts stringified name to naming service name.
static void appendCriterion(CosLifeCycle::Criteria &, const char *, const char *)
int main(int argc, char **argv)
The main process entry point.
static void appendCriterionStr(CosLifeCycle::Criteria &, const char *, const char *)
static void usage(int argc, char **argv)