[openrtm-users 01304] OpenRTM-aist-Python-1.0.0の_narrow処理について

池添明宏 ikezoe @ sec.co.jp
2010年 6月 17日 (木) 11:30:32 JST


セックの池添です。
# 連投、申し訳ありません。

私はOpenRTM.NETというRTミドルウェア実装を開発しているのですが、
OpenRTM-aist-Python-1.0.0-RELEASEとのデータポートの連携に
おいて問題が発生しております。

OpenRTM-aist-Python-1.0.0-RELEASEのOutPortと、OpenRTM.NETのInPort
を接続しデータを送信すると、接続が切れてしまいます。
InPortCorbaCdrConsumer.pyのputメソッドの実装は下記のようになって
いるのですが、self._ptr()を_narrowしていないため、self._ptr().put()
の呼び出しに失敗してしまいます。

  def put(self, data):
    self._rtcout.RTC_PARANOID("put()")

    try:
      if self._ptr():
        return self.convertReturnCode(self._ptr().put(data))
      return self.CONNECTION_LOST
    except:
      self._rtcout.RTC_ERROR(sys.exc_info()[0])
      return self.CONNECTION_LOST

    return self.UNKNOWN_ERROR


これを下記のように _narrow するように変更すれば、OpenRTM.NETとの
連携が可能になります。
(この変更を加えても、C++版、Python版との連携に問題はありません)

  def put(self, data):
    self._rtcout.RTC_PARANOID("put()")

    try:
      if self._ptr():
        ptr = self._ptr()
        inportcdr = ptr._narrow(OpenRTM__POA.InPortCdr)
        return self.convertReturnCode(inportcdr.put(data))
      return self.CONNECTION_LOST
    except:
      self._rtcout.RTC_ERROR(sys.exc_info()[0])
      return self.CONNECTION_LOST

    return self.UNKNOWN_ERROR


CORBAのプログラミング作法的に _narrow せずにCORBAメソッドを
呼び出しても問題ないものなのでしょうか?
OpenRTM.NETの実装の方に問題があるのかもしれませんので、
ご見解をお聞かせください。

ちなみに、C++版では_narrow、 Java版ではcastTypeをして型を定めているので、
Python版のような問題は発生しません。

よろしくお願いいたします。

以上

-- 
----------------------------------------------
株式会社セック 開発本部 第四開発部
TEL: 03-5458-7743 FAX: 03-5458-7726
池添 明宏 E-mail: ikezoe @ sec.co.jp
----------------------------------------------

======================================================================
この電子メールの内容および添付されている情報は、機密情報であると同時に、
宛先として意図した特定の受信者のみに送信いたしております。当方の誤送信
等により、心当たりのない方が受信された場合は、大変お手数ですが、受信さ
れましたメール内容は削除していただきますようお願いいたします。
======================================================================



openrtm-users メーリングリストの案内