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