Exemplo n.º 1
0
bool
wait_publication_matched_status(const Options& opts, const DDS::DataWriter_ptr w)
{
  //  To check the match status ?
  DDS::PublicationMatchedStatus matches = {0, 0, 0, 0, 0};
  TEST_ASSERT((w->get_publication_matched_status(matches) == ::DDS::RETCODE_OK));

  // Block until Subscriber is available
  DDS::StatusCondition_var condition = w->get_statuscondition();
  condition->set_enabled_statuses(DDS::PUBLICATION_MATCHED_STATUS
                                  | DDS::SUBSCRIPTION_MATCHED_STATUS
                                  //                                  | DDS::REQUESTED_INCOMPATIBLE_QOS_STATUS
                                  //                                  | DDS::OFFERED_INCOMPATIBLE_QOS_STATUS
                                  );

  DDS::WaitSet_var ws = new DDS::WaitSet;
  ws->attach_condition(condition);

  int duration = opts.test_duration;
  DDS::Duration_t timeout = {
    (duration < 0) ? DDS::DURATION_INFINITE_SEC : duration,
    (duration < 0) ? DDS::DURATION_INFINITE_NSEC : 0
  };

  DDS::ConditionSeq conditions;

  int status = ws->wait(conditions, timeout);
  ws->detach_condition(condition);

  if (status != DDS::RETCODE_OK)
    {
      ACE_ERROR_RETURN((LM_ERROR,
                        ACE_TEXT("(%P|$t)")
                        ACE_TEXT(" ERROR: wait failed at %N:%l\n")), false);
    }

  return true;
}