Index: liveevil.py =================================================================== RCS file: /cvs/Nevow/nevow/liveevil.py,v retrieving revision 1.1.1.1 diff -u -r1.1.1.1 liveevil.py --- liveevil.py 19 Feb 2004 06:43:17 -0000 1.1.1.1 +++ liveevil.py 4 Mar 2004 20:44:29 -0000 @@ -4,6 +4,7 @@ from twisted.internet import reactor from twisted.web import resource, server +from twisted.protocols import http from nevow import events, tags from nevow import inevow from nevow import compy @@ -38,11 +39,16 @@ # TODO set up an event hub self.events = events.EventNotification() self.hookupNotifications = [] + self.outputBuffer = [] def hookupOutput(self, output, finisher = None): #print "output hooked up." self.output = output self.finisher = finisher + for buf in self.outputBuffer: + output(buf) + print "Sent buffered item: ", buf + self.outputBuffer = [] for notify in self.hookupNotifications: notify(self) @@ -51,9 +57,11 @@ def sendScript(self, script): if self.output: + #print "output sent!", script self.output(script) else: - print "output ignored!", script + self.outputBuffer.append(script) + print "output buffered!", script def handleInput(self, identifier, *args): #self.sendScript(input) @@ -63,6 +71,14 @@ class Output(resource.Resource): def render(self, request): self.mind = mind = request.getSession().getComponent(ILiveEvil) + + ## When the connection is lost, reset LiveEvil.output to None + ## so we know when to buffer and when not to buffer + def _resetOutput(results, liveevil): + liveevil.output = None + return results + request.notifyFinish().addBoth(_resetOutput, mind) + mind.hookupOutput(request.write, request.finish) reactor.callLater(30, self.noop) return server.NOT_DONE_YET