Pregunta

Problema:¿Cómo puedo recibir notificaciones animadas sobre la conexión y desconexión del editor del stand?

Fondo:Estoy trabajando con una implementación de OpenDDS donde tengo un editor y un suscriptor de un tipo de datos (dt), usando el mismo tema, ubicados en computadoras separadas.

El lector del lado del suscriptor ha anulado implementaciones de on_data_available(...)y on_liveliness_changed(...).Mi suscriptor se inicia primero, lo que resulta en una devolución de llamada a on_liveliness_changed(...) que dice que no hay escritores disponibles.Cuando se inicia la editorial, recibo una nueva devolución de llamada que me informa que hay un escritor disponible y, cuando la editorial publica, on_data_available(...) se llama.Hasta ahora todo está funcionando como se esperaba.

El escritor del editor tiene una implementación anulada de on_publication_matched(...).Al iniciar el editor, on_publication_matched(...) recibe una llamada porque ya tenemos un suscriptor iniciado.

El problema es que cuando el editor se desconecta, no recibo ninguna devolución de llamada. on_liveliness_changed(...) en el lado del lector, ni recibo una nueva devolución de llamada cuando se reinicia el editor.

He intentado cambiar el lectorQos configurando el readerQos.liveliness.lease_duration.Pero el resultado es que el on_data_available(...) nunca recibe una llamada, y la única devolución de llamada a on_liveliness_changed(...) está al inicio, diciéndome que no hay editores.

DDS::DataReaderQos readerQos;
DDS::StatusKind mask = DDS::DATA_AVAILABLE_STATUS | DDS::LIVELINESS_CHANGED_STATUS |  DDS::LIVELINESS_LOST_STATUS ; 
m_subscriber->get_default_datareader_qos( readerQos );
DDS::Duration_t t = { 3, 0 };
readerQos.liveliness.lease_duration = t;
m_binary_Reader = static_cast<binary::binary_tdatareader( m_subscriber->create_datareader(m_Sender_Topic,readerQos,this, mask, 0, false) );

/kristofer

¿Fue útil?

Solución

Bueno, supongo que no hay muchos usuarios DDS aquí.

Después de algunas investigaciones he encontrado que se produce una coincidencia de lectura / escritura sólo si este criterio de compatibilidad se cumple: lease_duration ofrecido <= lease_duration solicitado

La solución fue establecer la QoS escritor para ofrecer la misma vivacidad. Probablemente hay una manera de comprobar si la QoS solicitados lector podrían ser suministrados por el escritor correspondiente, y si no, utilice una QoS "inferiores", toda tú no he probado todavía.

En el método de devolución de llamada on_liveliness_changed simplemente evaluó la alive_count en el de la LivelinessChangedStatus.

/ Kristofer

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top