ConnectorListener.py
Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 # -*- coding: euc-jp -*-
00003 
00004 ##
00005 # @file  ConnectorListener.py
00006 # @brief connector listener class
00007 # @date  $Date$
00008 # @author Noriaki Ando <n-ando@aist.go.jp> and Shinji Kurihara
00009 #
00010 # Copyright (C) 2009
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 *
00019 from omniORB import any
00020 
00021 import OpenRTM_aist
00022 
00023 
00024 ##
00025 # @if jp
00026 # @brief ConnectorDataListener のタイプ
00027 #
00028 # - ON_BUFFER_WRITE:          バッファ書き込み時
00029 # - ON_BUFFER_FULL:           バッファフル時
00030 # - ON_BUFFER_WRITE_TIMEOUT:  バッファ書き込みタイムアウト時
00031 # - ON_BUFFER_OVERWRITE:      バッファ上書き時
00032 # - ON_BUFFER_READ:           バッファ読み出し時
00033 # - ON_SEND:                  InProtへの送信時
00034 # - ON_RECEIVED:              InProtへの送信完了時
00035 # - ON_RECEIVER_FULL:         InProt側バッファフル時
00036 # - ON_RECEIVER_TIMEOUT:      InProt側バッファタイムアウト時
00037 # - ON_RECEIVER_ERROR:        InProt側エラー時
00038 #
00039 # @else
00040 # @brief The types of ConnectorDataListener
00041 # 
00042 # - ON_BUFFER_WRITE:          At the time of buffer write
00043 # - ON_BUFFER_FULL:           At the time of buffer full
00044 # - ON_BUFFER_WRITE_TIMEOUT:  At the time of buffer write timeout
00045 # - ON_BUFFER_OVERWRITE:      At the time of buffer overwrite
00046 # - ON_BUFFER_READ:           At the time of buffer read
00047 # - ON_SEND:                  At the time of sending to InPort
00048 # - ON_RECEIVED:              At the time of finishing sending to InPort
00049 # - ON_RECEIVER_FULL:         At the time of bufferfull of InPort
00050 # - ON_RECEIVER_TIMEOUT:      At the time of timeout of InPort
00051 # - ON_RECEIVER_ERROR:        At the time of error of InPort
00052 #
00053 # @endif
00054 #
00055 class ConnectorDataListenerType:
00056   def __init__(self):
00057     pass
00058 
00059   ON_BUFFER_WRITE              = 0
00060   ON_BUFFER_FULL               = 1
00061   ON_BUFFER_WRITE_TIMEOUT      = 2
00062   ON_BUFFER_OVERWRITE          = 3
00063   ON_BUFFER_READ               = 4
00064   ON_SEND                      = 5
00065   ON_RECEIVED                  = 6
00066   ON_RECEIVER_FULL             = 7
00067   ON_RECEIVER_TIMEOUT          = 8
00068   ON_RECEIVER_ERROR            = 9
00069   CONNECTOR_DATA_LISTENER_NUM  = 10
00070 
00071 
00072 
00073 ##
00074 # @if jp
00075 # @class ConnectorDataListener クラス
00076 #
00077 # データポートの Connector において発生する各種イベントに対するコー
00078 # ルバックを実現するリスナクラスの基底クラス。
00079 #
00080 # コアロジックがOutPortに対してデータ書き込み、InPort側でデータが取
00081 # 得されるまでの間で発生する各種イベントをフックするコールバックを設
00082 # 定することができる。なお、リスナークラスは2種類存在し、バッファフ
00083 # ルや送信時のコールバックで、その時点で有効なデータをファンクタの引
00084 # 数として受け取る ConnectorDataListener であり、もう一方はデータエ
00085 # ンプティやバッファ読み込み時のタイムアウトなどデータが取得できない
00086 # 場合などにコールされるファンクタの引数に何もとらならい
00087 # ConnecotorListener がある。
00088 # 
00089 # データポートには、接続時にデータの送受信方法についてデータフロー型、
00090 # サブスクリプション型等を設定することができる。
00091 # ConnectorDaataListener/ConnectorListener はともに、様々なイベント
00092 # に対するコールバックを設定することができるが、これらデータフロー型
00093 # およびサブスクリプション型の設定に応じて、利用可能なもの利用不可能
00094 # なものや、呼び出されるタイミングが異なる。
00095 # 以下に、インターフェースがCORBA CDR型の場合のコールバック一覧を示す。
00096 # 
00097 # OutPort:
00098 #  -  Push型: Subscription Typeによりさらにイベントの種類が分かれる。
00099 #    - Flush: Flush型にはバッファがないため ON_BUFFER 系のイベントは発生しない
00100 #      - ON_SEND
00101 #      - ON_RECEIVED
00102 #      - ON_RECEIVER_FULL
00103 #      - ON_RECEIVER_TIMEOUT
00104 #      - ON_RECEIVER_ERROR
00105 #      - ON_CONNECT
00106 #      - ON_DISCONNECT
00107 #      .
00108 #    - New型
00109 #      - ON_BUFFER_WRITE
00110 #      - ON_BUFFER_FULL
00111 #      - ON_BUFFER_WRITE_TIMEOUT
00112 #      - ON_BUFFER_OVERWRITE
00113 #      - ON_BUFFER_READ
00114 #      - ON_SEND
00115 #      - ON_RECEIVED
00116 #      - ON_RECEIVER_FULL
00117 #      - ON_RECEIVER_TIMEOUT
00118 #      - ON_RECEIVER_ERROR
00119 #      - ON_SENDER_ERROR
00120 #      - ON_CONNECT
00121 #      - ON_DISCONNECT
00122 #      .
00123 #    - Periodic型
00124 #      - ON_BUFFER_WRITE
00125 #      - ON_BUFFER_FULL
00126 #      - ON_BUFFER_WRITE_TIMEOUT
00127 #      - ON_BUFFER_READ
00128 #      - ON_SEND
00129 #      - ON_RECEIVED
00130 #      - ON_RECEIVER_FULL
00131 #      - ON_RECEIVER_TIMEOUT
00132 #      - ON_RECEIVER_ERROR
00133 #      - ON_BUFFER_EMPTY
00134 #      - ON_SENDER_EMPTY
00135 #      - ON_SENDER_ERROR
00136 #      - ON_CONNECT
00137 #      - ON_DISCONNECT
00138 #      .
00139 #    .
00140 #  - Pull型
00141 #    - ON_BUFFER_READ
00142 #    - ON_SEND
00143 #    - ON_BUFFER_EMPTY
00144 #    - ON_BUFFER_READ_TIMEOUT
00145 #    - ON_SENDER_EMPTY
00146 #    - ON_SENDER_TIMEOUT
00147 #    - ON_SENDER_ERROR
00148 #    - ON_CONNECT
00149 #    - ON_DISCONNECT
00150 # 
00151 #  InPort:
00152 #  - Push型:
00153 #      - ON_BUFFER_WRITE
00154 #      - ON_BUFFER_FULL
00155 #      - ON_BUFFER_WRITE_TIMEOUT
00156 #      - ON_BUFFER_WRITE_OVERWRITE
00157 #      - ON_RECEIVED
00158 #      - ON_RECEIVER_FULL
00159 #      - ON_RECEIVER_TIMEOUT
00160 #      - ON_RECEIVER_ERROR
00161 #      - ON_CONNECT
00162 #      - ON_DISCONNECT
00163 #      .
00164 #  - Pull型
00165 #      - ON_CONNECT
00166 #      - ON_DISCONNECT
00167 # @else
00168 # @class ConnectorDataListener class
00169 #
00170 # This class is abstract base class for listener classes that
00171 # provides callbacks for various events in the data port's
00172 # connectors.
00173 #
00174 # @endif
00175 #
00176 class ConnectorDataListener:
00177   """
00178   """
00179 
00180   def __del__(self):
00181     pass
00182 
00183   # virtual void operator()(const ConnectorInfo& info,
00184   #                         const cdrMemoryStream& data) = 0;
00185   def __call__(self, info, data):
00186     pass
00187 
00188   ##
00189   # @if jp
00190   #
00191   # @brief ConnectorDataListenerType を文字列に変換
00192   #
00193   # ConnectorDataListenerType を文字列に変換する
00194   #
00195   # @param type 変換対象 ConnectorDataListenerType
00196   #
00197   # @return 文字列変換結果
00198   #
00199   # @else
00200   #
00201   # @brief Convert ConnectorDataListenerType into the string.
00202   #
00203   # Convert ConnectorDataListenerType into the string.
00204   #
00205   # @param type The target ConnectorDataListenerType for transformation
00206   #
00207   # @return Trnasformation result of string representation
00208   #
00209   # @endif
00210   #
00211   def toString(type):
00212     typeString = ["ON_BUFFER_WRITE",
00213                   "ON_BUFFER_FULL",
00214                   "ON_BUFFER_WRITE_TIMEOUT",
00215                   "ON_BUFFER_OVERWRITE",
00216                   "ON_BUFFER_READ", 
00217                   "ON_SEND", 
00218                   "ON_RECEIVED",
00219                   "ON_RECEIVER_FULL", 
00220                   "ON_RECEIVER_TIMEOUT", 
00221                   "ON_RECEIVER_ERROR",
00222                   "CONNECTOR_DATA_LISTENER_NUM"]
00223 
00224     if type < ConnectorDataListenerType.CONNECTOR_DATA_LISTENER_NUM:
00225       return typeString[type]
00226 
00227     return ""
00228 
00229   toString = staticmethod(toString)
00230 
00231 
00232 ##
00233 # @if jp
00234 # @class ConnectorDataListenerT クラス
00235 #
00236 # データポートの Connector において発生する各種イベントに対するコー
00237 # ルバックを実現するリスナクラスの基底クラス。
00238 # 
00239 # このクラスは、operator()() の第2引数に cdrMemoryStream 型ではなく、
00240 # 実際にデータポートで使用される変数型をテンプレート引数として
00241 # 渡すことができる。
00242 #
00243 # @else
00244 # @class ConnectorDataListenerT class
00245 #
00246 # This class is abstract base class for listener classes that
00247 # provides callbacks for various events in the data port's
00248 # connectors.
00249 #
00250 # This class template can have practical data types that are used
00251 # as typed variable for DataPort as an argument of template instead
00252 # of cdrMemoryStream.
00253 #
00254 # @endif
00255 #
00256 class ConnectorDataListenerT(ConnectorDataListener):
00257   """
00258   """
00259 
00260   def __del__(self):
00261     pass
00262 
00263 
00264   ##
00265   # @if jp
00266   #
00267   # @brief コールバックメソッド
00268   #
00269   # データをデータポートで使用される変数型に変換して ConnectorDataListenerT
00270   # のコールバックメソッドを呼び出す。
00271   #
00272   # @param info ConnectorInfo 
00273   # @param cdrdata cdrMemoryStream型のデータ
00274   #
00275   # @else
00276   #
00277   # @brief Callback method
00278   #
00279   # This method invokes the callback method of ConnectorDataListenerT. 
00280   # Data is converted into the variable type used in DataPort.
00281   #
00282   # @param info ConnectorInfo 
00283   # @param cdrdata Data of cdrMemoryStream type
00284   #
00285   # @endif
00286   #
00287   # virtual void operator()(const ConnectorInfo& info,
00288   #                         const cdrMemoryStream& cdrdata)
00289   def __call__(self, info, cdrdata, data):
00290     endian = info.properties.getProperty("serializer.cdr.endian","little")
00291     if endian is not "little" and endian is not None:
00292       endian = OpenRTM_aist.split(endian, ",") # Maybe endian is ["little","big"]
00293       endian = OpenRTM_aist.normalize(endian) # Maybe self._endian is "little" or "big"
00294 
00295     if endian == "little":
00296       endian = True
00297     elif endian == "big":
00298       endian = False
00299     else:
00300       endian = True
00301 
00302     _data = cdrUnmarshal(any.to_any(data).typecode(), cdrdata, endian)
00303     return _data
00304 
00305 
00306 
00307 ##
00308 # @if jp
00309 # @brief ConnectorListener のタイプ
00310 #  
00311 # - ON_BUFFER_EMPTY:       バッファが空の場合
00312 # - ON_BUFFER_READTIMEOUT: バッファが空でタイムアウトした場合
00313 # - ON_SENDER_EMPTY:       OutPort側バッファが空
00314 # - ON_SENDER_TIMEOUT:     OutPort側タイムアウト時
00315 # - ON_SENDER_ERROR:       OutPort側エラー時
00316 # - ON_CONNECT:            接続確立時
00317 # - ON_DISCONNECT:         接続切断時
00318 #
00319 # @else
00320 # @brief The types of ConnectorListener
00321 # 
00322 # - ON_BUFFER_EMPTY:       At the time of buffer empty
00323 # - ON_BUFFER_READTIMEOUT: At the time of buffer read timeout
00324 # - ON_BUFFER_EMPTY:       At the time of empty of OutPort
00325 # - ON_SENDER_TIMEOUT:     At the time of timeout of OutPort
00326 # - ON_SENDER_ERROR:       At the time of error of OutPort
00327 # - ON_CONNECT:            At the time of connection
00328 # - ON_DISCONNECT:         At the time of disconnection
00329 #
00330 # @endif
00331 #
00332 # enum ConnectorListenerType
00333 class ConnectorListenerType:
00334 
00335   def __init__(self):
00336     pass
00337   
00338   ON_BUFFER_EMPTY        = 0
00339   ON_BUFFER_READ_TIMEOUT = 1
00340   ON_SENDER_EMPTY        = 2
00341   ON_SENDER_TIMEOUT      = 3
00342   ON_SENDER_ERROR        = 4
00343   ON_CONNECT             = 5
00344   ON_DISCONNECT          = 6
00345   CONNECTOR_LISTENER_NUM = 7
00346 
00347 
00348 
00349 ##
00350 # @if jp
00351 # @class ConnectorListener クラス
00352 #
00353 # データポートの Connector において発生する各種イベントに対するコー
00354 # ルバックを実現するリスナクラスの基底クラス。
00355 #
00356 # コアロジックがOutPortに対してデータ書き込み、InPort側でデータが取
00357 # 得されるまでの間で発生する各種イベントをフックするコールバックを設
00358 # 定することができる。なお、リスナークラスは2種類存在し、バッファフ
00359 # ルや送信時のコールバックで、その時点で有効なデータをファンクタの引
00360 # 数として受け取る ConnectorDataListener であり、もう一方はデータエ
00361 # ンプティやバッファ読み込み時のタイムアウトなどデータが取得できない
00362 # 場合などにコールされるファンクタの引数に何もとらならい
00363 # ConnecotorListener がある。
00364 #
00365 # データポートには、接続時にデータの送受信方法についてデータフロー型、
00366 # サブスクリプション型等を設定することができる。
00367 # ConnectorDaataListener/ConnectorListener は共にに、様々なイベント
00368 # に対するコールバックを設定することができるが、これらデータフロー型
00369 # およびサブスクリプション型の設定に応じて、利用できるもの、できない
00370 # もの、また呼び出されるタイミングが異なる。以下に、インターフェース
00371 # がCORBA CDR型の場合のコールバック一覧を示す。
00372 #
00373 # OutPort:
00374 # -  Push型: Subscription Typeによりさらにイベントの種類が分かれる。
00375 #   - Flush: Flush型にはバッファがないため ON_BUFFER 系のイベントは発生しない
00376 #     - ON_SEND
00377 #     - ON_RECEIVED
00378 #     - ON_RECEIVER_FULL
00379 #     - ON_RECEIVER_TIMEOUT
00380 #     - ON_RECEIVER_ERROR
00381 #     - ON_CONNECT
00382 #     - ON_DISCONNECT
00383 #     .
00384 #   - New型
00385 #     - ON_BUFFER_WRITE
00386 #     - ON_BUFFER_FULL
00387 #     - ON_BUFFER_WRITE_TIMEOUT
00388 #     - ON_BUFFER_OVERWRITE
00389 #     - ON_BUFFER_READ
00390 #     - ON_SEND
00391 #     - ON_RECEIVED
00392 #     - ON_RECEIVER_FULL
00393 #     - ON_RECEIVER_TIMEOUT
00394 #     - ON_RECEIVER_ERROR
00395 #     - ON_SENDER_ERROR
00396 #     - ON_CONNECT
00397 #     - ON_DISCONNECT
00398 #     .
00399 #   - Periodic型
00400 #     - ON_BUFFER_WRITE
00401 #     - ON_BUFFER_FULL
00402 #     - ON_BUFFER_WRITE_TIMEOUT
00403 #     - ON_BUFFER_READ
00404 #     - ON_SEND
00405 #     - ON_RECEIVED
00406 #     - ON_RECEIVER_FULL
00407 #     - ON_RECEIVER_TIMEOUT
00408 #     - ON_RECEIVER_ERROR
00409 #     - ON_BUFFER_EMPTY
00410 #     - ON_SENDER_EMPTY
00411 #     - ON_SENDER_ERROR
00412 #     - ON_CONNECT
00413 #     - ON_DISCONNECT
00414 #     .
00415 #   .
00416 # - Pull型
00417 #   - ON_BUFFER_READ
00418 #   - ON_SEND
00419 #   - ON_BUFFER_EMPTY
00420 #   - ON_BUFFER_READ_TIMEOUT
00421 #   - ON_SENDER_EMPTY
00422 #   - ON_SENDER_TIMEOUT
00423 #   - ON_SENDER_ERROR
00424 #   - ON_CONNECT
00425 #   - ON_DISCONNECT
00426 #
00427 # InPort:
00428 # - Push型:
00429 #     - ON_BUFFER_WRITE
00430 #     - ON_BUFFER_FULL
00431 #     - ON_BUFFER_WRITE_TIMEOUT
00432 #     - ON_BUFFER_WRITE_OVERWRITE
00433 #     - ON_RECEIVED
00434 #     - ON_RECEIVER_FULL
00435 #     - ON_RECEIVER_TIMEOUT
00436 #     - ON_RECEIVER_ERROR
00437 #     - ON_CONNECT
00438 #     - ON_DISCONNECT
00439 #     .
00440 # - Pull型
00441 #     - ON_CONNECT
00442 #     - ON_DISCONNECT
00443 # @else
00444 # @class ConnectorListener class
00445 #
00446 # This class is abstract base class for listener classes that
00447 # provides callbacks for various events in the data port's
00448 # connectors.
00449 #
00450 # @endif
00451 #
00452 class ConnectorListener:
00453   """
00454   """
00455 
00456   def __del__(self):
00457     pass
00458 
00459   # virtual void operator()(const ConnectorInfo& info) = 0;
00460   def __call__(self,  info):
00461     pass
00462 
00463   ##
00464   # @if jp
00465   #
00466   # @brief ConnectorListenerType を文字列に変換
00467   #
00468   # ConnectorListenerType を文字列に変換する
00469   #
00470   # @param type 変換対象 ConnectorListenerType
00471   #
00472   # @return 文字列変換結果
00473   #
00474   # @else
00475   #
00476   # @brief Convert ConnectorListenerType into the string.
00477   #
00478   # Convert ConnectorListenerType into the string.
00479   #
00480   # @param type The target ConnectorListenerType for transformation
00481   #
00482   # @return Trnasformation result of string representation
00483   #
00484   # @endif
00485   #
00486   def toString(type):
00487     typeString = ["ON_BUFFER_EMPTY",
00488                   "ON_BUFFER_READ_TIMEOUT",
00489                   "ON_SENDER_EMPTY", 
00490                   "ON_SENDER_TIMEOUT", 
00491                   "ON_SENDER_ERROR", 
00492                   "ON_CONNECT",
00493                   "ON_DISCONNECT",
00494                   "CONNECTOR_LISTENER_NUM"]
00495 
00496     if type < ConnectorListenerType.CONNECTOR_LISTENER_NUM:
00497       return typeString[type]
00498 
00499     return ""
00500 
00501   toString = staticmethod(toString)
00502 
00503 
00504 ##
00505 # @if jp
00506 # @class ConnectorDataListener ホルダクラス
00507 #
00508 # 複数の ConnectorDataListener を保持し管理するクラス。
00509 #
00510 # @else
00511 # @class ConnectorDataListener holder class
00512 #
00513 # This class manages one ore more instances of ConnectorDataListener class.
00514 #
00515 # @endif
00516 #
00517 class ConnectorDataListenerHolder:
00518   """
00519   """
00520 
00521   ##
00522   # @if jp
00523   # @brief コンストラクタ
00524   # @else
00525   # @brief Constructor
00526   # @endif
00527   #
00528   def __init__(self):
00529     self._listeners = []
00530     return
00531 
00532 
00533   ##
00534   # @if jp
00535   # @brief デストラクタ
00536   # @else
00537   # @brief Destructor
00538   # @endif
00539   #
00540   def __del__(self):
00541     for listener in self._listeners:
00542       for (k,v) in listener.iteritems():
00543         if v:
00544           del k
00545     return
00546 
00547     
00548   ##
00549   # @if jp
00550   #
00551   # @brief リスナーの追加
00552   #
00553   # リスナーを追加する。
00554   #
00555   # @param self
00556   # @param listener 追加するリスナ
00557   # @param autoclean true:デストラクタで削除する,
00558   #                  false:デストラクタで削除しない
00559   # @else
00560   #
00561   # @brief Add the listener.
00562   #
00563   # This method adds the listener. 
00564   #
00565   # @param self
00566   # @param listener Added listener
00567   # @param autoclean true:The listener is deleted at the destructor.,
00568   #                  false:The listener is not deleted at the destructor. 
00569   # @endif
00570   #
00571   # void addListener(ConnectorDataListener* listener, bool autoclean);
00572   def addListener(self, listener, autoclean):
00573     self._listeners.append({listener:autoclean})
00574     return
00575 
00576     
00577   ##
00578   # @if jp
00579   #
00580   # @brief リスナーの削除
00581   #
00582   # リスナを削除する。
00583   #
00584   # @param self
00585   # @param listener 削除するリスナ
00586   # @else
00587   #
00588   # @brief Remove the listener. 
00589   #
00590   # This method removes the listener. 
00591   #
00592   # @param self
00593   # @param listener Removed listener
00594   # @endif
00595   #
00596   # void removeListener(ConnectorDataListener* listener);
00597   def removeListener(self, listener):
00598     for (i, _listener) in enumerate(self._listeners):
00599       if listener in _listener:
00600         del self._listeners[i][listener]
00601         return
00602 
00603     
00604   ##
00605   # @if jp
00606   #
00607   # @brief リスナーへ通知する
00608   #
00609   # 登録されているリスナのコールバックメソッドを呼び出す。
00610   #
00611   # @param self
00612   # @param info ConnectorInfo
00613   # @param cdrdata データ
00614   # @else
00615   #
00616   # @brief Notify listeners. 
00617   #
00618   # This calls the Callback method of the registered listener. 
00619   #
00620   # @param self
00621   # @param info ConnectorInfo
00622   # @param cdrdata Data
00623   # @endif
00624   #
00625   # void notify(const ConnectorInfo& info,
00626   #             const cdrMemoryStream& cdrdata);
00627   def notify(self, info, cdrdata):
00628     for listener in self._listeners:
00629       for (k,v) in listener.iteritems():
00630         k(info, cdrdata)
00631     return
00632 
00633 
00634 ##
00635 # @if jp
00636 # @class ConnectorListener ホルダクラス
00637 #
00638 # 複数の ConnectorListener を保持し管理するクラス。
00639 #
00640 # @else
00641 # @class ConnectorListener holder class
00642 #
00643 # This class manages one ore more instances of ConnectorListener class.
00644 #
00645 # @endif
00646 #
00647 class ConnectorListenerHolder:
00648   """
00649   """
00650 
00651   ##
00652   # @if jp
00653   # @brief コンストラクタ
00654   # @else
00655   # @brief Constructor
00656   # @endif
00657   #
00658   def __init__(self):
00659     self._listeners = []
00660     return
00661 
00662     
00663   ##
00664   # @if jp
00665   # @brief デストラクタ
00666   # @else
00667   # @brief Destructor
00668   # @endif
00669   #
00670   def __del__(self):
00671     for listener in self._listeners:
00672       for (k,v) in listener.iteritems():
00673         if v:
00674           del k
00675     return
00676         
00677     
00678   ##
00679   # @if jp
00680   #
00681   # @brief リスナーの追加
00682   #
00683   # リスナーを追加する。
00684   #
00685   # @param self
00686   # @param listener 追加するリスナ
00687   # @param autoclean true:デストラクタで削除する,
00688   #                  false:デストラクタで削除しない
00689   # @else
00690   #
00691   # @brief Add the listener.
00692   #
00693   # This method adds the listener. 
00694   #
00695   # @param self
00696   # @param listener Added listener
00697   # @param autoclean true:The listener is deleted at the destructor.,
00698   #                  false:The listener is not deleted at the destructor. 
00699   # @endif
00700   #
00701   # void addListener(ConnectorListener* listener, bool autoclean);
00702   def addListener(self, listener, autoclean):
00703     self._listeners.append({listener:autoclean})
00704     return
00705 
00706 
00707   ##
00708   # @if jp
00709   #
00710   # @brief リスナーの削除
00711   #
00712   # リスナを削除する。
00713   #
00714   # @param self
00715   # @param listener 削除するリスナ
00716   # @else
00717   #
00718   # @brief Remove the listener. 
00719   #
00720   # This method removes the listener. 
00721   #
00722   # @param self
00723   # @param listener Removed listener
00724   # @endif
00725   #
00726   # void removeListener(ConnectorListener* listener);
00727   def removeListener(self, listener):
00728     for (i, _listener) in enumerate(self._listeners):
00729       if listener in _listener:
00730         del self._listeners[i][listener]
00731         return
00732 
00733 
00734   ##
00735   # @if jp
00736   #
00737   # @brief リスナーへ通知する
00738   #
00739   # 登録されているリスナのコールバックメソッドを呼び出す。
00740   #
00741   # @param self
00742   # @param info ConnectorInfo
00743   # @else
00744   #
00745   # @brief Notify listeners. 
00746   #
00747   # This calls the Callback method of the registered listener. 
00748   #
00749   # @param self
00750   # @param info ConnectorInfo
00751   # @endif
00752   #
00753   # void notify(const ConnectorInfo& info);
00754   def notify(self, info):
00755     for listener in self._listeners:
00756       for (k,v) in listener.iteritems():
00757         k(info)
00758     return
00759 
00760 
00761   
00762 class ConnectorListeners:
00763   def __init__(self):
00764     self.connectorData_ = [ OpenRTM_aist.ConnectorDataListenerHolder() for i in range(OpenRTM_aist.ConnectorDataListenerType.CONNECTOR_DATA_LISTENER_NUM) ]
00765     self.connector_     = [ OpenRTM_aist.ConnectorListenerHolder() for i in range(OpenRTM_aist.ConnectorListenerType.CONNECTOR_LISTENER_NUM) ]
00766     return


openrtm_aist_python
Author(s): Shinji Kurihara
autogenerated on Thu Aug 27 2015 14:17:28