プロジェクト

全般

プロフィール

機能 #4428

完了

direct接続Pull型の実装

n-miyamoto さんがほぼ7年前に追加. 約6年前に更新.

ステータス:
終了
優先度:
通常
担当者:
対象バージョン:
-
開始日:
2018/01/23
期日:
進捗率:

100%

予定工数:

ファイル

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

n-miyamoto さんがほぼ7年前に更新

  • ファイル write.png write.png を追加
  • ファイル read.png read.png を追加
  • ステータス担当 から 解決 に変更
  • 進捗率0 から 100 に変更
  • 追加した関数
    以下の関数を追加した。
  • 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);

        }

n-miyamoto さんが約6年前に更新

  • ステータス解決 から 終了 に変更

他の形式にエクスポート: Atom PDF