[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 メーリングリストの案内