Project

General

Profile

Actions

機能 #4428

closed

direct接続Pull型の実装

Added by n-miyamoto over 6 years ago. Updated about 6 years ago.

Status:
終了
Priority:
通常
Assignee:
Target version:
-
Start date:
01/23/2018
Due date:
% Done:

100%

Estimated time:

Files

write.png (37.1 KB) write.png n-miyamoto, 01/23/2018 03:18 PM
read.png (44.6 KB) read.png n-miyamoto, 01/23/2018 03:18 PM

Updated by n-miyamoto over 6 years ago

  • 追加した関数
    以下の関数を追加した。
  • InPortBase
    • getLocalOutPort
      • ローカルのピアOutPortを取得
  • InPortConnector
    • setOutPort
      • データをダイレクトに書き込むためのOutPortのサーバントを設定する
  • OutPort
    • read
      • データをダイレクトに読み込む
  • OutPortBase
    • getListeners
      • リスナホルダを取得する
  • OutPortConnector
    • setDirectMode
      • ダイレクト接続モードに設定
    • directMode
      • ダイレクト接続モードかの判定
  • データ転送時の処理
    データ書き込み時のシーケンス図は以下のようになっている。

まずOutPortConnectorのdirectMode関数を呼び出してPull型ダイレクト接続かを確認する。
ダイレクト接続に場合は変数m_directValueにデータを格納し、m_directNewDataをtrueにする。
この部分についてはミューテックスにより排他処理をする。

データ読み込み時のシーケンス図は以下のようになっている。
まずgetDirectData関数を呼び出す。getDirectData関数は、Pull型Direct接続ではない場合は即座にfalseを返す。
Pull型Direct接続の場合はOutPortのread関数を呼び出す。
read関数内では変数m_directValueを変数に格納し、m_directNewDataをfalseにしている。
read関数内はミューテックスにより排他処理をする。

  • コネクタ接続時について
    コネクタ接続時にOutPortConnectorのsetDirectMode関数を呼び出すことにより、Pull型direct接続であることを設定する必要がある。
  OutPortConnector*
  OutPortBase::createConnector(const ConnectorProfile& cprof,
                               coil::Properties& prop,
                               OutPortProvider* provider)
  {
  (省略)
          if (coil::normalize(prop["interface_type"]) == "direct")
        {
            connector->setDirectMode();
        }

またInPortConnctorにOutPortのサーバントを設定する。

    ConnectorInfo profile(cprof.name,
                          cprof.connector_id,
                          CORBA_SeqUtil::refToVstring(cprof.ports),
                          prop); 
    (省略)
        if (coil::normalize(prop["interface_type"]) == "direct")
        {
            OutPortBase* outport = getLocalOutPort(profile);
            if (outport == NULL)
            {
                RTC_DEBUG(("interface_type is direct, " 
                    "but a peer InPort servant could not be obtained."));
                delete connector;
                return 0;
            }

            connector->setOutPort(outport);

        }

Actions #2

Updated by n-miyamoto about 6 years ago

  • Status changed from 解決 to 終了
Actions

Also available in: Atom PDF