mirror of git://git.psyced.org/git/pypsyc
50 lines
1.5 KiB
Python
50 lines
1.5 KiB
Python
class PSYCReceiver:
|
|
def msg(self, vars, mc, data):
|
|
'called when a message is received'
|
|
# method inheritance
|
|
if mc.count('_') > 10:
|
|
# considered abusive
|
|
return
|
|
|
|
l = len(mc)
|
|
while l > 0:
|
|
method = getattr(self, 'msg%s'%(mc[:l]), None)
|
|
if method is not None:
|
|
# could this method return the next methodname
|
|
# to be called? freaky!
|
|
# actually, this a much more flexible fallthrough
|
|
# than switch/case provides.
|
|
# yet it is more expensive to evaluate
|
|
method(vars, mc, data)
|
|
break
|
|
l = mc.rfind('_', 0, l)
|
|
else:
|
|
self.msgUnknownMethod(vars, mc, data)
|
|
def msgUnknownMethod(self, vars, mc, data):
|
|
print 'unknown %s'%mc
|
|
|
|
|
|
class PSYCObject(PSYCReceiver):
|
|
"""generic PSYC object"""
|
|
def __init__(self, netname, center):
|
|
self.center = center
|
|
self.netname = netname.lower()
|
|
self.center.register_object(netname, self)
|
|
def url(self):
|
|
return self.netname
|
|
def str(self):
|
|
return self.netname
|
|
def sendmsg(self, vars, mc, data):
|
|
'called to send a message'
|
|
l = len(mc)
|
|
while l > 0:
|
|
method = getattr(self, 'sendmsg%s'%(mc[:l]), None)
|
|
if method is not None:
|
|
method(vars, mc, data)
|
|
break
|
|
l = mc.rfind('_', 0, l)
|
|
else:
|
|
self.center.sendmsg(vars, mc, data)
|
|
def castmsg(self, vars, mc, data):
|
|
'called to send a message to a group'
|