15 Kasım 2017 Çarşamba

DDS DataReaderListener Arayüzü

Giriş
DataReader ile ilişkili bir sınıftır

on_requested_deadline_missed metodu
Örnek ver

on_requested_incompatible_qos metodu
Örnek ver

on_sample_rejected metodu
Örnek ver

on_liveliness_changed metodu
Örnek ver

on_data_available metodu
Genellikle sadece bu metod kullanılır. Gelen veriyi okuruz. Bazen gelen veriyi bir başka Executor içine atarak işlemek daha iyi olabiliyor.

Örnek
Şöyle yaparız. Burada DataReader benim istediğim tipte.
void on_data_available(DataReader<Foo>& the_reader)
{
  ...
}
Örnek - C++
Şöyle yaparız. Parametre olarak geçilen DataReader pointer nesnesi benim istediğim DataReader tipine cast edilir. Daha sonra DataReader nesnesinin take_next_sample metodu çağrılır ve veri okunur.

Burada reader'dan veri kopyalanarak okunuyor.
void MyReader::on_data_available (DDS::DataReader* the_reader)
{
  MyReader * pReader = dynamic_cast<MyReader*> (the_reader);
  MyDataType data;
SampleInfo sampleInfo;
  DDS::ReturnCode_t ret  = pReader->take_next_sample (data,sampleInfo);
  if (ret == DDS::RETCODE_OK && sampleInfo.valid_data == DDS_TRUE)
  {
    ...
  }
}
Örnek - Java
Şöyle yaparız. Burada Reader'dan okunan veri return_loan() ile tekrar iade ediliyor.
public void on_data_available(DataReader reader) {
  HelloWorldDataReader myReader = (HelloWorldDataReader)reader;

  try {
    myReader.take(_dataSeq, _infoSeq,
      ResourceLimitsQosPolicy.LENGTH_UNLIMITED,
      SampleStateKind.ANY_SAMPLE_STATE,
      ViewStateKind.ANY_VIEW_STATE,
      InstanceStateKind.ANY_INSTANCE_STATE);

    for(int i = 0; i < _dataSeq.size(); ++i) {
      SampleInfo info = (SampleInfo)_infoSeq.get(i);

      if (info.valid_data) {
        System.out.println(((HelloWorld)_dataSeq.get(i)).toString("Received",0));

      }
    }
  } catch (RETCODE_NO_DATA noData) {
    // No data to process
  } finally {
    myReader.return_loan(_dataSeq, _infoSeq);
  }
}
on_subscription_matched metodu
Örnek ver

on_sample_lost metodu
Örnek ver

Hiç yorum yok:

Yorum Gönder