Project

General

Profile

機能 #4428

direct接続Pull型の実装

Added by n-miyamoto about 3 years ago. Updated over 2 years ago.

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

100%

Estimated time:

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
2784
2785

Associated revisions

Revision 3184 (diff)
Added by miyamoto about 3 years ago

[incompat,->RELENG_1_2] refs #4428

Revision 3184 (diff)
Added by miyamoto about 3 years ago

[incompat,->RELENG_1_2] refs #4428

Revision 3187 (diff)
Added by miyamoto about 3 years ago

[compat, ->RELENG_1_2] refs #4428

Revision 3187 (diff)
Added by miyamoto about 3 years ago

[compat, ->RELENG_1_2] refs #4428

Revision 3189 (diff)
Added by miyamoto about 3 years ago

[compat, ->RELENG_1_2] refs #4428

Revision 3189 (diff)
Added by miyamoto about 3 years ago

[compat, ->RELENG_1_2] refs #4428

Revision 3190 (diff)
Added by miyamoto about 3 years ago

[compat, ->RELENG_1_2] refs #4428

Revision 3190 (diff)
Added by miyamoto about 3 years ago

[compat, ->RELENG_1_2] refs #4428

Revision 3193 (diff)
Added by miyamoto about 3 years ago

[compat, ->RELENG_1_2] refs #4428

Revision 3193 (diff)
Added by miyamoto about 3 years ago

[compat, ->RELENG_1_2] refs #4428

Revision 3194 (diff)
Added by miyamoto about 3 years ago

[compat, ->RELENG_1_2] refs #4428

Revision 3194 (diff)
Added by miyamoto about 3 years ago

[compat, ->RELENG_1_2] refs #4428

Revision 3195 (diff)
Added by miyamoto about 3 years ago

[compat, ->RELENG_1_2] refs #4428

Revision 3195 (diff)
Added by miyamoto about 3 years ago

[compat, ->RELENG_1_2] refs #4428

Revision 3196 (diff)
Added by miyamoto about 3 years ago

[compat, ->RELENG_1_2] refs #4428

Revision 3196 (diff)
Added by miyamoto about 3 years ago

[compat, ->RELENG_1_2] refs #4428

History

#1 Updated by n-miyamoto about 3 years ago

2784
2785
  • 追加した関数
    以下の関数を追加した。
  • 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);

        }

#2 Updated by n-miyamoto over 2 years ago

  • Status changed from 解決 to 終了

Also available in: Atom PDF