| 115 | |
| 116 | template<typename MessageType> |
| 117 | typename OpenDDS::DCPS::DDSTraits<MessageType>::DataWriterType::_var_type |
| 118 | create_writer(const DDS::Publisher_var& pub, const char* topicName, |
| 119 | const DDS::DataWriterQos& qos = DATAWRITER_QOS_DEFAULT, |
| 120 | const DDS::DataWriterListener_var& listener = 0, |
| 121 | const DDS::StatusMask& mask = OpenDDS::DCPS::DEFAULT_STATUS_MASK) |
| 122 | { |
| 123 | const DDS::TypeSupport_var ts = new typename ::OpenDDS::DCPS::DDSTraits<MessageType>::TypeSupportImplType(); |
| 124 | const DDS::DomainParticipant_var dp = pub->get_participant(); |
| 125 | const CORBA::String_var typeName = ts->get_type_name(); |
| 126 | (void) ts->register_type(dp, typeName); // may have been registered before |
| 127 | |
| 128 | const DDS::Topic_var topic = |
| 129 | dp->create_topic(topicName, typeName, TOPIC_QOS_DEFAULT, 0, 0); |
| 130 | if (!topic) return 0; |
| 131 | |
| 132 | const DDS::DataWriter_var dw = |
| 133 | pub->create_datawriter(topic, qos, listener, mask); |
| 134 | return OpenDDS::DCPS::DDSTraits<MessageType>::DataWriterType::_narrow(dw); |
| 135 | } |
| 136 | |
| 137 | OpenDDS::DCPS::Atomic<CORBA::Long> key(0); |
| 138 | |