コード例 #1
0
ファイル: Subscriber.cpp プロジェクト: CapXilinx/OpenDDS
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;
}
コード例 #2
0
ファイル: Publisher.cpp プロジェクト: Fantasticer/OpenDDS
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;
}