Viewing file: chatterbox.py (1.25 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
from twisted.python.util import sibpath from nevow.loaders import xmlfile from nevow.athena import LiveElement, expose
class ChatRoom(object):
def __init__(self): self.chatters = []
def wall(self, message): for chatter in self.chatters: chatter.wall(message)
def tellEverybody(self, who, what): for chatter in self.chatters: chatter.hear(who.username, what)
def makeChatter(self): elem = ChatterElement(self) self.chatters.append(elem) return elem
# element to be run with twistd chat = ChatRoom().makeChatter
class ChatterElement(LiveElement):
docFactory = xmlfile(sibpath(__file__, 'template.html')) jsClass = u'ChatThing.ChatterWidget'
def __init__(self, room): self.room = room
def setUsername(self, username): self.username = username message = ' * user '+username+' has joined the room' self.room.wall(message) setUsername = expose(setUsername)
def say(self, message): self.room.tellEverybody(self, message) say = expose(say)
def wall(self, message): self.callRemote('displayMessage', message)
def hear(self, username, what): self.callRemote('displayUserMessage', username, what)
|