2009-12-10 9 views
2

문제 : 부스 게시자의 활발한 알림을 연결 및 연결 해제 할 수있는 방법은 무엇입니까?OpenDDS 및 게시자 존재 알림

배경 : 동일한 주제를 사용하는 별도의 컴퓨터에있는 데이터 유형 (dt)의 게시자와 구독자가있는 OpenDDS 구현으로 작업하고 있습니다.

구독자 측 판독기가 on_data_available(...)on_liveliness_changed(...)의 구현을 재정의했습니다. 내 구독자가 먼저 시작되어 사용 가능한 작성자가 없다고 말하는 on_liveliness_changed(...)으로 콜백합니다. 게시자가 시작되면 사용 가능한 작성자가 있음을 알리는 새 콜백이 표시되고 게시자가 게시하면 on_data_available(...)이 호출됩니다. 지금까지 모든 것이 예상대로 작동합니다.

게시자의 작성자는 on_publication_matched(...)의 재정의 된 구현이 있습니다. 게시자가 시작될 때 이미 구독자가 시작되어 on_publication_matched(...)이 호출됩니다.

문제는 게시자의 연결이 끊어지면 리더 측에서 on_liveliness_changed(...)으로 콜백을받지 못하고 게시자가 다시 시작될 때 새로운 콜백을받지 못한다는 것입니다.

readerQos.liveliness.lease_duration을 설정하여 readerQos를 변경하려고했습니다. 그러나 결과는 on_data_available(...)이 호출되지 않으며 on_liveliness_changed(...)으로의 유일한 콜백은 시작시 게시자가 없음을 나타냅니다.

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는

답변

4

, 여기 없어 많은 DDS 사용자가 좋아 같아요. = lease_duration <을 제공하는 솔루션은 같은 생동감을 제공하기 위해 작가의 QoS를 설정했다 lease_duration

요청 :

은 몇 가지 조사 후 나는이 호환성 기준을 만족하는 경우에만 리더/라이터 일치가 발생하는 것을 발견했다. 요청 된 리더 QoS가 해당 작성자에 의해 제공 될 수 있는지 확인하는 방법이있을 수 있습니다. 그렇지 않은 경우 아직 사용하지 않은 "낮은"QoS를 사용하십시오.

on_liveliness_changed 콜백 메소드에서 나는 단순히 LivelinessChangedStatus에서 alive_count를 평가했습니다.

/크리스토퍼