spoon.messaging.decorators

Package spoon :: Package messaging :: Module decorators |
[hide private]
[frames] | no frames]

# Source Code for Module spoon.messaging.decorators

     1  #
     2  # Copyright (C) 2006, Matt Sullivan <matts@zarrf.com>
     3  #
     4  # Permission is hereby granted, free of charge, to any person obtaining
     5  # a copy of this software and associated documentation files (the
     6  # "Software"), to deal in the Software without restriction, including
     7  # without limitation the rights to use, copy, modify, merge, publish,
     8  # distribute, sublicense, and/or sell copies of the Software, and to
     9  # permit persons to whom the Software is furnished to do so, subject to
    10  # the following conditions:
    11  #
    12  # The above copyright notice and this permission notice shall be included
    13  # in all copies or substantial portions of the Software.
    14  #
    15  # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
    16  # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    17  # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
    18  # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
    19  # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
    20  # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
    21  # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    22  #
    23
    24  from messagingcore import SingletonMessaging
    25
    26 -class receive(object):
    27      """
    28      The receive decorator can be used to decorate functions and static methods
    29      (NOT methods of class instances) that should receive messages of a given type.
    30      In the case of static methods, be sure to put the staticmethod decorator first.
    31
    32      When a message of the given type is received, the function will be called with
    33      (srcNodeId, message type, attached object) as the arguments to it.
    34      """
    35 -    def __init__(self, msgtype):
    36          """
    37          @param msgtype: Indicates the message type that the function will receive.
    38          This can be a list of msgtypes as well as just a string.
    39          """
    40          if type(msgtype) == str:
    41              self.msgtype = [msgtype]
    42          else:
    43              self.msgtype = msgtype
    44
    45 -    def __call__(self, handler):
    46          messaging = SingletonMessaging.getinstance()
    47          for x in self.msgtype:
    48              messaging.registerHandler(x, handler)
    49
    50  handleMsg = receive
    51