操作
機能 #4428
完了n-miyamoto さんがほぼ8年前に更新
- 追加した関数
 以下の関数を追加した。
- InPortBase
	- getLocalOutPort
	- ローカルのピアOutPortを取得
 
 
- getLocalOutPort
	
- InPortConnector
	- setOutPort
	- データをダイレクトに書き込むためのOutPortのサーバントを設定する
 
 
- setOutPort
	
- OutPort
	- read
	- データをダイレクトに読み込む
 
 
- read
	
- OutPortBase
	- getListeners
	- リスナホルダを取得する
 
 
- getListeners
	
- OutPortConnector
	- setDirectMode
	- ダイレクト接続モードに設定
 
- directMode
	- ダイレクト接続モードかの判定
 
 
- setDirectMode
	
- データ転送時の処理
 データ書き込み時のシーケンス図は以下のようになっている。
まず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);
        }
操作