SubscriberDelegate::SubscriberDelegate(
    const dds::domain::DomainParticipant& dp,
    const dds::sub::qos::SubscriberQos& qos,
    const dds::core::status::StatusMask& event_mask) :
    dp_(dp),
    qos_(qos),
    listener_(0),
    mask_(event_mask),
    sub_(),
    sub_event_forwarder_()
{
    DDS::SubscriberQos sqos = org::opensplice::sub::qos::convertQos(qos);

    DDS::Subscriber_ptr s = dp->dp_->create_subscriber(sqos, 0,
                            event_mask.to_ulong());

    if(s == 0) throw dds::core::NullReferenceError(org::opensplice::core::exception_helper(
                    OSPL_CONTEXT_LITERAL(
                        "dds::core::NullReferenceError : Unable to create Subscriber. "
                        "Nil return from ::create_subscriber")));

    sub_.reset(s, ::org::opensplice::core::SubDeleter(dp_->dp_));

    DDS::DataReaderQos oldqos;
    DDS::ReturnCode_t result = sub_->get_default_datareader_qos(oldqos);
    org::opensplice::core::check_and_throw(result, OSPL_CONTEXT_LITERAL("Calling ::get_default_datareader_qos"));

    default_dr_qos_ = org::opensplice::sub::qos::convertQos(oldqos);

    entity_ = DDS::Entity::_narrow(s);
}
void SubscriberDelegate::event_forwarder(
    dds::sub::SubscriberListener* listener,
    const dds::core::smart_ptr_traits<DDS::SubscriberListener>::ref_type& forwarder,
    const dds::core::status::StatusMask& event_mask)
{
#ifdef _WIN32
#pragma warning( push )
#pragma warning( disable : 4702 ) //disable warning caused by temporary exception, remove later
#endif
    throw dds::core::UnsupportedError(org::opensplice::core::exception_helper(
                                          OSPL_CONTEXT_LITERAL("dds::core::UnsupportedError : SubscriberListener is not currently supported")));
#ifdef _WIN32
#pragma warning ( pop ) //re-enable warning to prevent leaking to user code, remove later
#endif
    dds::core::smart_ptr_traits<DDS::SubscriberListener>::ref_type tmp_fwd;
    if(listener)
    {
        tmp_fwd = forwarder;
    }
    listener_ = listener;
    sub_event_forwarder_.swap(tmp_fwd);
    mask_ = event_mask;
    DDS::ReturnCode_t result = sub_->set_listener(sub_event_forwarder_.get(), event_mask.to_ulong());
    org::opensplice::core::check_and_throw(result, OSPL_CONTEXT_LITERAL("Calling ::set_listener"));
}
void SubscriberDelegate::init_builtin(DDS::Subscriber_ptr ddssub)
{
    if(ddssub == 0) throw dds::core::NullReferenceError(org::opensplice::core::exception_helper(
                    OSPL_CONTEXT_LITERAL(
                        "dds::core::NullReferenceError : Unable to get builtin Subscriber. "
                        "Nil return from ::get_builtin_subscriber")));

    DDS::SubscriberQos qos;
    DDS::ReturnCode_t result = ddssub->get_qos(qos);
    org::opensplice::core::check_and_throw(result, OSPL_CONTEXT_LITERAL("Calling ::get_qos"));
    qos_ = org::opensplice::sub::qos::convertQos(qos);

    sub_.reset(ddssub, ::org::opensplice::core::SubDeleter(dp_->dp_));

    DDS::DataReaderQos oldqos;
    result = sub_->get_default_datareader_qos(oldqos);
    org::opensplice::core::check_and_throw(result, OSPL_CONTEXT_LITERAL("Calling ::get_default_datareader_qos"));

    default_dr_qos_ = org::opensplice::sub::qos::convertQos(oldqos);
    entity_ = DDS::Entity::_narrow(ddssub);

    org::opensplice::core::SubDeleter* d = OSPL_CXX11_STD_MODULE::get_deleter<org::opensplice::core::SubDeleter>(sub_);
    if(d)
    {
        d->set_builtin();
    }
}
Beispiel #4
0
    Topic(const dds::domain::DomainParticipant& dp,
          const std::string& name,
          const std::string& type_name)
        : dds::topic::detail::TopicDescription<T>(dp, name, type_name),
          dp_(dp),
          qos_(),
          listener_(0),
          mask_(dds::core::status::StatusMask())
        {
        char* tn = ts_.get_type_name();
        ts_.register_type(dp->dp_.get(), tn);

        qos(dp.default_topic_qos());
        DDS::TopicQos tqos = convertQos(qos_);
        t_ = dp->dp_->create_topic(name.c_str(), tn, tqos, 0,
                                   mask_.to_ulong());

        if (t_ == 0)
            throw dds::core::NullReferenceError(
                        org::opensplice::core::exception_helper(
                            OSPL_CONTEXT_LITERAL(
                                "dds::core::NullReferenceError : Unable to create Topic! "
                                "Nil return from ::create_topic")));

        topic_ = org::opensplice::core::DDS_TOPIC_REF(t_, org::opensplice::core::TopicDeleter(dp->dp_));
    }
void
SubscriberDelegate::default_datareader_qos(const dds::sub::qos::DataReaderQos& qos)
{
    DDS::ReturnCode_t result = sub_->set_default_datareader_qos(convertQos(qos));
    org::opensplice::core::check_and_throw(result, OSPL_CONTEXT_LITERAL("Calling ::set_default_datareader_qos"));

    default_dr_qos_ = qos;
}
Beispiel #6
0
void ignore(const dds::domain::DomainParticipant& dp, FwdIterator begin, FwdIterator end)
{
    for(FwdIterator i = begin; i < end; i++)
    {
        DDS::ReturnCode_t result = ((dds::domain::DomainParticipant)dp)->dp_->ignore_topic(i->handle());
        org::opensplice::core::check_and_throw(result, OSPL_CONTEXT_LITERAL("Calling ::ignore_topic"));
    }
}
SubscriberDelegate::~SubscriberDelegate()
{
    if(listener_ != 0)
    {
        DDS::ReturnCode_t result = sub_->set_listener(0, DDS::STATUS_MASK_NONE);
        org::opensplice::core::check_and_throw(result, OSPL_CONTEXT_LITERAL("Calling ::set_listener(nil)"));
    }
}
Beispiel #8
0
    const ::dds::core::status::InconsistentTopicStatus& inconsistent_topic_status()
    {
        DDS::InconsistentTopicStatus status;
        DDS::ReturnCode_t result = t_->get_inconsistent_topic_status(status);
        org::opensplice::core::check_and_throw(result, OSPL_CONTEXT_LITERAL("Calling ::get_inconsistent_topic_status"));

        inconsistent_topic_status_->total_count(status.total_count);
        inconsistent_topic_status_->total_count_change(status.total_count_change);

        return inconsistent_topic_status_;
    }
 ~ReadCondition()
 {
     if(read_condition_.in())
     {
         DDS::ReturnCode_t result = adr_->get_dds_datareader()->delete_readcondition(read_condition_.in());
         org::opensplice::core::check_and_throw(result, OSPL_CONTEXT_LITERAL("Calling ::delete_readcondition"));
     }
     if(executor_)
     {
         delete executor_;
     }
 }
dds::sub::qos::DataReaderQos
SubscriberDelegate::default_datareader_qos()
{
    DDS::DataReaderQos oldqos;

    DDS::ReturnCode_t result = sub_->get_default_datareader_qos(oldqos);
    org::opensplice::core::check_and_throw(result, OSPL_CONTEXT_LITERAL("Calling ::get_default_datareader_qos"));

    dds::sub::qos::DataReaderQos newqos = org::opensplice::sub::qos::convertQos(oldqos);
    default_dr_qos_ = newqos;
    return default_dr_qos_;
}
Beispiel #11
0
uint32_t discover(const dds::domain::DomainParticipant& dp, BinIterator begin)
{
#ifdef _WIN32
#pragma warning( push )
#pragma warning( disable : 4702 ) //disable warning caused by temporary exception, remove later
#endif
    throw dds::core::UnsupportedError(org::opensplice::core::exception_helper(
                                          OSPL_CONTEXT_LITERAL("dds::core::UnsupportedError : Function not currently supported")));
#ifdef _WIN32
#pragma warning ( pop ) //re-enable warning to prevent leaking to user code, remove later
#endif
    return 0;
}
dds::sub::SubscriberListener*
SubscriberDelegate::listener() const
{
#ifdef _WIN32
#pragma warning( push )
#pragma warning( disable : 4702 ) //disable warning caused by temporary exception, remove later
#endif
    throw dds::core::UnsupportedError(org::opensplice::core::exception_helper(
                                          OSPL_CONTEXT_LITERAL("dds::core::UnsupportedError : SubscriberListener is not currently supported")));
#ifdef _WIN32
#pragma warning ( pop ) //re-enable warning to prevent leaking to user code, remove later
#endif
    return this->listener_;
}
Beispiel #13
0
TOPIC discover(const dds::domain::DomainParticipant& dp,
               const std::string& name,
               const dds::core::Duration& timeout)
{
#ifdef _WIN32
#pragma warning( push )
#pragma warning( disable : 4702 ) //disable warning caused by temporary exception, remove later
#endif
    throw dds::core::UnsupportedError(org::opensplice::core::exception_helper(
                                          OSPL_CONTEXT_LITERAL("dds::core::UnsupportedError : Function not currently supported")));
#ifdef _WIN32
#pragma warning ( pop ) //re-enable warning to prevent leaking to user code, remove later
#endif
    return dds::core::null;
}
Beispiel #14
0
 ReadCondition(const dds::sub::AnyDataReader& adr,
               const dds::sub::status::DataState& status,
               bool query = false) :
     executor_(0), adr_(adr), status_(status)
 {
     if(!query)
     {
         read_condition_ = adr_->get_dds_datareader()->create_readcondition(status_.sample_state().to_ulong(),
                           status_.view_state().to_ulong(), status_.instance_state().to_ulong());
         if(read_condition_.in() == 0) throw dds::core::NullReferenceError(org::opensplice::core::exception_helper(
                         OSPL_CONTEXT_LITERAL("dds::core::NullReferenceError : Unable to create ReadCondition. "
                                              "Nil return from ::create_readcondition")));
         condition_ = read_condition_.in();
     }
 }
Beispiel #15
0
void org::opensplice::core::TopicDeleter::operator()(DDS::Topic* t)
{
    if(!is_closed_)
    {
        DDS::ReturnCode_t result = dp_->delete_topic(t);
        org::opensplice::core::check_and_throw(result, OSPL_CONTEXT_LITERAL("Calling ::delete_topic"));

        if(dds::core::detail::maplog("MM") >= os_reportVerbosity)
        {
            std::ostringstream oss;
            oss << "Deleted Topic at: " << std::hex << t << std::dec;
            OMG_DDS_LOG("MM", oss.str().c_str());
        }
    }
    DDS::release(t);
}
Beispiel #16
0
void org::opensplice::core::PubDeleter::close(DDS::Publisher* p)
{
    if(!is_closed_)
    {
        DDS::ReturnCode_t result = dp_->delete_publisher(p);
        org::opensplice::core::check_and_throw(result, OSPL_CONTEXT_LITERAL("Calling ::delete_publisher"));
        is_closed_ = true;

        if(dds::core::detail::maplog("MM") >= os_reportVerbosity)
        {
            std::ostringstream oss;
            oss << "Deleted Publisher at: " << std::hex << p << std::dec;
            OMG_DDS_LOG("MM", oss.str().c_str());
        }
    }
}
Beispiel #17
0
void org::opensplice::core::DWDeleter::operator()(DDS::DataWriter* w)
{
    if(!is_closed_)
    {
        DDS::ReturnCode_t result = pub_->delete_datawriter(w);
        org::opensplice::core::check_and_throw(result, OSPL_CONTEXT_LITERAL("Calling ::delete_datawriter"));

        if(dds::core::detail::maplog("MM") >= os_reportVerbosity)
        {
            std::ostringstream oss;
            oss << "Deleted DataWriter at: " << std::hex << w << std::dec;
            OMG_DDS_LOG("MM", oss.str().c_str());
        }
    }
    DDS::release(w);
}
Beispiel #18
0
void org::opensplice::core::DPDeleter::close(DDS::DomainParticipant* dp)
{
    if(!is_closed_)
    {
        DDS::DomainParticipantFactory_var dpf = DDS::DomainParticipantFactory::get_instance();
        DDS::ReturnCode_t result = dpf->delete_participant(dp);
        org::opensplice::core::check_and_throw(result, OSPL_CONTEXT_LITERAL("Calling ::delete_participant"));
        is_closed_ = true;

        if(dds::core::detail::maplog("MM") >= os_reportVerbosity)
        {
            std::ostringstream oss;
            oss << "Deleted Participant at: " << std::hex << dp << std::dec;
            OMG_DDS_LOG("MM", oss.str().c_str());
        }
    }
}
Beispiel #19
0
Topic<T, DELEGATE>::Topic(const dds::domain::DomainParticipant& dp,
                          const std::string& topic_name,
                          const dds::topic::qos::TopicQos& qos,
                          dds::topic::TopicListener<T>* listener,
                          const dds::core::status::StatusMask& mask)
    : dds::topic::TopicDescription<T, DELEGATE>(new DELEGATE<T>(dp,
            topic_name,
            topic_type_name<T>::value(),
            qos,
            listener,
            mask))
{
    if (listener != NULL)
    {
        throw dds::core::UnsupportedError(org::opensplice::core::exception_helper(
                OSPL_CONTEXT_LITERAL("dds::core::UnsupportedError : TopicListener is not yet implemented")));
    }
}
Beispiel #20
0
 QueryCondition(const dds::sub::Query& query,
     const dds::sub::status::DataState& data_state, const FUN& functor)
     : ReadCondition(query.data_reader(), data_state, functor, true),
       query_(query)
 {
     DDS::StringSeq params;
     params.length(static_cast<DDS::ULong>(query.parameters_length()));
     for(unsigned int i = 0; i < query.parameters_length(); i++)
     {
         params[i] = (query.begin() + i)->c_str();
     }
     query_condition_ = adr_->get_dds_datareader()->create_querycondition(status_.sample_state().to_ulong(),
         status_.view_state().to_ulong(), status_.instance_state().to_ulong(), query.expression().c_str(), params);
     if (query_condition_.in() == 0) throw dds::core::NullReferenceError(org::opensplice::core::exception_helper(
         OSPL_CONTEXT_LITERAL("dds::core::NullReferenceError : Unable to create QueryCondition. "
                                 "Nil return from ::create_querycondition")));
     condition_ = query_condition_.in();
 }
Beispiel #21
0
void org::opensplice::core::DRDeleter::close(DDS::DataReader* r)
{
    if(!is_closed_ && !is_builtin_)
    {
        DDS::ReturnCode_t result = sub_->delete_datareader(r);
        org::opensplice::core::check_and_throw(result, OSPL_CONTEXT_LITERAL("Calling ::delete_datareader"));
        is_closed_ = true;

        if(dds::core::detail::maplog("MM") >= os_reportVerbosity)
        {
            std::ostringstream oss;
            oss << "Deleted DataReader at: " << std::hex << r << std::dec;
            OMG_DDS_LOG("MM", oss.str().c_str());
        }
    }
    if(is_builtin_)
    {
        throw 0;
    }
}
Beispiel #22
0
dds::domain::DomainParticipant find(uint32_t id)
{
    DDS::DomainParticipantFactory_var dpf = DDS::DomainParticipantFactory::get_instance();
    if(dpf.in() == 0)
    {
        throw dds::core::PreconditionNotMetError(org::opensplice::core::exception_helper(
                    OSPL_CONTEXT_LITERAL(
                        "dds::core::PreconditionNotMetError: Unable to resolve the DomainParticipant Factory.")));
    }
    DDS::DomainParticipant_ptr ddsdp = dpf->lookup_participant(id);
    if(ddsdp)
    {
        dds::domain::DomainParticipant dp =
            org::opensplice::core::EntityRegistry<DDS::DomainParticipant_ptr, dds::domain::DomainParticipant>::get(ddsdp);
        if(dp != dds::core::null)
        {
            return dp;
        }
    }
    return dds::domain::DomainParticipant(dds::core::null);
}
Beispiel #23
0
void ignore(const dds::domain::DomainParticipant& dp,
            const dds::core::InstanceHandle& handle)
{
    DDS::ReturnCode_t result = ((dds::domain::DomainParticipant)dp)->dp_->ignore_topic(handle->handle());
    org::opensplice::core::check_and_throw(result, OSPL_CONTEXT_LITERAL("Calling ::ignore_topic"));
}
Beispiel #24
0
 virtual ~QueryCondition()
 {
     DDS::ReturnCode_t result = adr_->get_dds_datareader()->delete_readcondition(query_condition_.in());
     org::opensplice::core::check_and_throw(result, OSPL_CONTEXT_LITERAL("Calling ::delete_readcondition"));
 }
void SubscriberDelegate::qos(const dds::sub::qos::SubscriberQos& sqos)
{
    DDS::ReturnCode_t result = sub_->set_qos(org::opensplice::sub::qos::convertQos(sqos));
    org::opensplice::core::check_and_throw(result, OSPL_CONTEXT_LITERAL("Calling ::set_qos"));
    qos_ = sqos;
}
void SubscriberDelegate::notify_datareaders()
{
    DDS::ReturnCode_t result = sub_->notify_datareaders();
    org::opensplice::core::check_and_throw(result, OSPL_CONTEXT_LITERAL("Calling ::notify_datareaders"));
}
 CoherentAccessImpl()
 {
     throw dds::core::UnsupportedError(org::opensplice::core::exception_helper(
                                           OSPL_CONTEXT_LITERAL("dds::core::UnsupportedError : Function not currently supported")));
 }