Problème: Comment puis-je obtenir des notifications de vivacité de la connexion et de la déconnexion de l'éditeur de stand?OpenDDS et notification de la présence de l'éditeur
Contexte: Je travaille avec une implémentation OpenDDS où j'ai un éditeur et un abonné d'un type de données (dt), utilisant le même sujet, situé sur des ordinateurs séparés. Le lecteur du côté abonné a des implémentations remplacées de on_data_available(...)
et on_liveliness_changed(...)
. Mon abonné est démarré en premier, ce qui entraîne un rappel à on_liveliness_changed(...)
qui indique qu'il n'y a aucun rédacteur disponible. Lorsque l'éditeur est démarré, je reçois un nouveau rappel pour me dire qu'un rédacteur est disponible et lorsque l'éditeur publie, on_data_available(...)
est appelé. Jusqu'à présent, tout fonctionne comme prévu.
L'auteur de l'éditeur a une implémentation substituée de on_publication_matched(...)
. Lorsque vous démarrez l'éditeur, on_publication_matched(...)
est appelé car nous avons déjà un abonné démarré. Le problème est que lorsque l'éditeur se déconnecte, je n'obtiens aucun rappel au on_liveliness_changed(...)
du côté du lecteur, et je n'obtiens pas de nouveau rappel lorsque l'éditeur est redémarré.
J'ai essayé de changer le readerQos en réglant le readerQos.liveliness.lease_duration
. Mais le résultat est que le on_data_available(...)
n'est jamais appelé, et le seul rappel à on_liveliness_changed(...)
est au démarrage, me disant qu'il n'y a pas d'éditeurs.
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