OpenDDS  Snapshot(2023/04/28-20:55)
BitPubListenerImpl.cpp
Go to the documentation of this file.
1 /*
2  *
3  *
4  * Distributed under the OpenDDS License.
5  * See: http://www.opendds.org/license.html
6  */
7 
8 #include "DCPS/DdsDcps_pch.h" //Only the _pch include should start with DCPS/
9 
10 #ifndef DDS_HAS_MINIMUM_BIT
11 
12 #include "BitPubListenerImpl.h"
13 #include "DomainParticipantImpl.h"
14 #include "GuidConverter.h"
15 #include "Discovery.h"
16 #include "Service_Participant.h"
17 #include "BuiltInTopicUtils.h"
18 #include "dds/DdsDcpsCoreTypeSupportImpl.h"
19 
21 
22 namespace OpenDDS {
23 namespace DCPS {
24 
26 : partipant_ (partipant)
27 {
28 }
29 
31 {
32 }
33 
34 void BitPubListenerImpl::on_data_available(DDS::DataReader_ptr reader)
35 {
36  try {
37  ::DDS::PublicationBuiltinTopicDataDataReader_var bit_dr =
38  ::DDS::PublicationBuiltinTopicDataDataReader::_narrow(reader);
39 
40  if (CORBA::is_nil(bit_dr.in())) {
42  ACE_TEXT("(%P|%t) ERROR: BitPubListenerImpl::on_data_available ")
43  ACE_TEXT("_narrow failed!\n")));
44  return;
45  }
46 
48  DDS::SampleInfo si;
49  DDS::ReturnCode_t status;
50 
51  do {
52  status = bit_dr->take_next_sample(data, si);
53 
54  if (status == DDS::RETCODE_OK) {
55  if (si.valid_data) {
56 #ifndef OPENDDS_NO_OWNERSHIP_KIND_EXCLUSIVE
57  const GUID_t pub_id = bit_key_to_guid(data.key);
58  CORBA::Long const ownership_strength = data.ownership_strength.value;
59  this->partipant_->update_ownership_strength(pub_id, ownership_strength);
60  if (DCPS_debug_level > 4) {
62  ACE_TEXT("(%P|%t) BitPubListenerImpl::on_data_available: %X ")
63  ACE_TEXT("reset ownership strength %d for writer %C.\n"),
64  this, ownership_strength, LogGuid(pub_id).c_str()));
65  }
66 #endif
67  }
71  ACE_TEXT("(%P|%t) ERROR: BitPubListenerImpl::on_data_available:")
72  ACE_TEXT(" unknown instance state: %d\n"),
73  si.instance_state));
74  }
75  } else if (status != DDS::RETCODE_NO_DATA) {
77  ACE_TEXT("(%P|%t) ERROR: BitPubListenerImpl::on_data_available:")
78  ACE_TEXT(" unexpected status: %d\n"),
79  status));
80  }
81  } while (status == DDS::RETCODE_OK);
82 
83  } catch (const CORBA::Exception& e) {
84  e._tao_print_exception("Exception caught in BitPubListenerImpl::on_data_available():");
85  }
86 }
87 
89  DDS::DataReader_ptr,
91 {
92 }
93 
95  DDS::DataReader_ptr,
97 {
98 }
99 
101  DDS::DataReader_ptr,
103 {
104 }
105 
107  DDS::DataReader_ptr,
109 {
110 }
111 
113  DDS::DataReader_ptr,
115 {
116 }
117 
119  DDS::DataReader_ptr,
120  const DDS::SampleLostStatus&)
121 {
122 }
123 
124 } // namespace DCPS
125 } // namespace OpenDDS
126 
128 
129 #endif // DDS_HAS_MINIMUM_BIT
Implements the OpenDDS::DCPS::DomainParticipant interfaces.
#define ACE_DEBUG(X)
ACE_CDR::Long Long
#define ACE_ERROR(X)
InstanceStateKind instance_state
virtual void on_liveliness_changed(DDS::DataReader_ptr reader, const DDS::LivelinessChangedStatus &status)
void update_ownership_strength(const GUID_t &pub_id, const CORBA::Long &ownership_strength)
DomainParticipantImpl * partipant_
virtual void on_sample_rejected(DDS::DataReader_ptr reader, const DDS::SampleRejectedStatus &status)
LM_DEBUG
virtual void on_data_available(DDS::DataReader_ptr reader)
virtual void on_sample_lost(DDS::DataReader_ptr reader, const DDS::SampleLostStatus &status)
ACE_TEXT("TCP_Factory")
virtual void on_requested_deadline_missed(DDS::DataReader_ptr reader, const DDS::RequestedDeadlineMissedStatus &status)
const ReturnCode_t RETCODE_NO_DATA
OpenDDS_Dcps_Export unsigned int DCPS_debug_level
Definition: debug.cpp:30
BitPubListenerImpl(DomainParticipantImpl *partipant)
virtual void on_requested_incompatible_qos(DDS::DataReader_ptr reader, const DDS::RequestedIncompatibleQosStatus &status)
const InstanceStateKind NOT_ALIVE_DISPOSED_INSTANCE_STATE
#define OPENDDS_END_VERSIONED_NAMESPACE_DECL
const ReturnCode_t RETCODE_OK
OpenDDS_Dcps_Export GUID_t bit_key_to_guid(const DDS::BuiltinTopicKey_t &key)
Definition: GuidUtils.h:251
LM_ERROR
The Internal API and Implementation of OpenDDS.
Definition: AddressCache.h:28
const InstanceStateKind NOT_ALIVE_NO_WRITERS_INSTANCE_STATE
void _tao_print_exception(const char *info, FILE *f=stdout) const
Definition: Exception.cpp:82
virtual void on_subscription_matched(DDS::DataReader_ptr reader, const DDS::SubscriptionMatchedStatus &status)
Boolean is_nil(T x)