int ACE_TMAIN(int argc, ACE_TCHAR *argv[]) { std::stringstream ss; ss << "(" << ACE_OS::getpid() << ")"; const std::string pid = ss.str(); std::cerr << pid << "Sub Creating App\n"; int status = 0; try { ::TestUtils::DDSApp ddsApp(argc, argv); std::cerr << pid << "Sub Creating topic\n"; ::TestUtils::DDSTopicFacade< ::Xyz::FooDataWriterImpl> topic = ddsApp.topic_facade< ::Xyz::FooDataWriterImpl>("bar"); // need to process after calling topic to ensure all DDS/TAO/ACE command line // parameters are already removed ::TestUtils::Arguments args; args.add_long("stage", 0); args.add_bool("verbose", false); ::TestUtils::Options options(argc, argv); const long stage = options.get<long>("stage"); if (stage != 1 && stage != 2) { std::cerr << "ERROR: Sub command line parameter \"stage\" set to " << stage << " should be set to 1 or 2 "; return -1; } // Create Listener ::TestUtils::ListenerRecorder< ::Xyz::Foo, ::Xyz::FooDataReader>* listener_impl = new ::TestUtils::ListenerRecorder< ::Xyz::Foo, ::Xyz::FooDataReader>; listener_impl->verbose(options.get<bool>("verbose")); DDS::DataReaderListener_var listener(listener_impl); // Create data reader for the topic std::cerr << pid << "Sub Creating Stage " << stage << " reader\n"; DDS::DataReader_var dr = topic.reader(listener); { std::cerr << pid << "Sub Stage " << stage << " waiting for 2 writer to come and go" << std::endl; OpenDDS::Model::ReaderSync rs(dr, 2); } std::cerr << pid << "Sub Stage " << stage << " done waiting\n"; const Messages msgs = listener_impl->messages(); int expected_count = -1; if (!valid(msgs, stage, expected_count)) { status = -1; } std::cerr << pid << "Sub DDSApp going out of scope\n"; // Listener will be cleaned up when reader goes out of scope } catch (const CORBA::Exception& e) { e._tao_print_exception("Exception caught in main():"); status = -1; } catch (const std::exception& ex) { ACE_ERROR((LM_ERROR, ACE_TEXT("ERROR: main() - %s\n"), ex.what())); status = -1; } catch (const std::string& msg) { ACE_ERROR((LM_ERROR, ACE_TEXT("ERROR: main() - %s\n"), msg.c_str())); status = -1; } std::cerr << pid << "Sub returning status=" << status << "\n"; return status; }
int ACE_TMAIN(int argc, ACE_TCHAR *argv[]) { try { ::TestUtils::DDSApp ddsApp(argc, argv); // Parse App options ::TestUtils::Arguments args(true); args.add_bool("keyed_data",true); args.add_long("num_threads_to_write",1); args.add_bool("multiple_instances",false); args.add_long("num_writes_per_thread",1); args.add_long("max_samples_per_instance",::DDS::LENGTH_UNLIMITED); args.add_long("history_depth",1); args.add_long("write_delay_msec",0); args.add_long("data_dropped",0); args.add_long("num_writers",1); ::TestUtils::Options options(argc, argv, args); if ( options.get<bool>("keyed_data") == true ) { PubDriver< ::Xyz::KeyedData > driver; driver.run(ddsApp, options); ddsApp.cleanup(); } else { PubDriver< ::Xyz::NoKeyData > driver; driver.run(ddsApp, options); ddsApp.cleanup(); } } catch (const TestException&) { ACE_ERROR((LM_ERROR, ACE_TEXT("(%P|%t) PubDriver TestException.\n"))); } catch (const CORBA::Exception& e) { e._tao_print_exception("Exception caught in main():"); return -1; } catch (std::exception& ex) { ACE_ERROR_RETURN((LM_ERROR, ACE_TEXT("ERROR: main() - %C\n"), ex.what()), -1); } catch (std::string& msg) { ACE_ERROR_RETURN((LM_ERROR, ACE_TEXT("ERROR: main() - %C\n"), msg.c_str()), -1); } ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t) Pub DDSApp going out of scope (shutdown)\n"))); ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t) Pub returning status=0\n"))); return 0; }