OutPortCorbaConsumer.py

説明を見る。
00001 #!/usr/bin/env python
00002 # -*- coding: euc-jp -*-
00003 
00004 ##
00005 # @file  OutPortCorbaConsumer.py
00006 # @brief OutPortCorbaConsumer class
00007 # @date  $Date: 2007/09/25 $
00008 # @author Noriaki Ando <n-ando@aist.go.jp> and Shinji Kurihara
00009 #
00010 # Copyright (C) 2006-2008
00011 #     Noriaki Ando
00012 #     Task-intelligence Research Group,
00013 #     Intelligent Systems Research Institute,
00014 #     National Institute of
00015 #         Advanced Industrial Science and Technology (AIST), Japan
00016 #     All rights reserved.
00017  
00018 from omniORB import any
00019 from omniORB import CORBA
00020 
00021 import OpenRTM
00022 import RTC, RTC__POA 
00023 
00024 
00025 
00026 ##
00027 # @if jp
00028 # @class OutPortCorbaConsumer
00029 #
00030 # @brief OutPortCorbaConsumer クラス
00031 #
00032 # 通信手段に CORBA を利用した出力ポートコンシューマの実装クラス。
00033 #
00034 # @since 0.4.0
00035 #
00036 # @else
00037 # @class OutPortCorbaConsumer
00038 # @brief OutPortCorbaConsumer class
00039 # @endif
00040 class OutPortCorbaConsumer(OpenRTM.OutPortConsumer,OpenRTM.CorbaConsumer):
00041   """
00042   """
00043 
00044 
00045 
00046   ##
00047   # @if jp
00048   # @brief コンストラクタ
00049   #
00050   # コンストラクタ
00051   #
00052   # @param self
00053   # @param buffer_ 本ポートに割り当てるバッファ
00054   #
00055   # @else
00056   # @brief Constructor
00057   # @endif
00058   def __init__(self, buffer_):
00059     self._buffer = buffer_
00060     OpenRTM.CorbaConsumer.__init__(self)
00061 
00062 
00063   ##
00064   # @if jp
00065   # @brief データを読み出す
00066   #
00067   # 設定されたデータを読み出す。
00068   #
00069   # @param self
00070   # @param data 読み出したデータを受け取るオブジェクト
00071   #
00072   # @return データ読み出し処理結果(読み出し成功:true、読み出し失敗:false)
00073   #
00074   # @else
00075   #
00076   # @endif
00077   def get(self, data):
00078     try:
00079       obj = self._ptr()._narrow(RTC.OutPortAny)
00080       if CORBA.is_nil(obj):
00081         return False
00082       d = any.from_any(obj.get(), keep_structs=True)
00083       data[0] = d
00084       return True
00085     except:
00086       return False
00087     
00088     return False
00089 
00090 
00091   ##
00092   # @if jp
00093   # @brief ポートからデータを受信する
00094   #
00095   # 接続先のポートからデータを受信する。
00096   # 受信したデータは内部に設定されたバッファに書き込まれる。
00097   #
00098   # @param self
00099   #
00100   # @else
00101   #
00102   # @endif
00103   def pull(self):
00104     data = [None]
00105     if self.get(data):
00106       self._buffer.write(data[0])
00107 
00108 
00109   ##
00110   # @if jp
00111   # @brief データ受信通知への登録
00112   #
00113   # 指定されたプロパティに基づいて、データ受信通知の受け取りに登録する。
00114   #
00115   # @param self
00116   # @param properties 登録情報
00117   #
00118   # @return 登録処理結果(登録成功:true、登録失敗:false)
00119   #
00120   # @else
00121   #
00122   # @endif
00123   def subscribeInterface(self, properties):
00124     index = OpenRTM.NVUtil.find_index(properties,
00125                       "dataport.corba_any.outport_ref")
00126     if index < 0:
00127       return False
00128 
00129     try:
00130       obj = any.from_any(properties[index].value, keep_structs=True)
00131       self.setObject(obj)
00132       return True
00133     except:
00134       return False
00135 
00136     return False
00137 
00138 
00139   ##
00140   # @if jp
00141   # @brief データ受信通知からの登録解除
00142   #
00143   # データ受信通知の受け取りから登録を解除する。
00144   #
00145   # @param self
00146   # @param properties 登録解除情報
00147   #
00148   # @else
00149   #
00150   # @endif
00151   def unsubscribeInterface(self, properties):
00152     index = OpenRTM.NVUtil.find_index(properties,
00153                       "dataport.corba_any.outport_ref")
00154     if index < 0:
00155       return
00156 
00157     try:
00158       obj = any.from_any(properties[index].value, keep_structs=True)
00159       if self.getObject()._is_equivalent(obj):
00160         self.releaseObject()
00161     except:
00162       return

OpenRTMに対してMon Mar 17 15:11:05 2008に生成されました。  doxygen 1.5.4