text: # -*- coding: utf-8 -*-
  # Copyright 2010 British Broadcasting Corporation and Kamaelia Contributors(1)
  #
  # (1) Kamaelia Contributors are listed in the AUTHORS file and at
  #     http://www.kamaelia.org/AUTHORS - please extend this file,
  #     not this notice.
  #
  # Licensed under the Apache License, Version 2.0 (the "License");
  # you may not use this file except in compliance with the License.
  # You may obtain a copy of the License at
  #
  #     http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
  
  import ErrorPages
  from Axon.Component import component
  from Axon.Ipc import producerFinished, shutdown
  Sessions = {}
  
  def websiteSessionExample(request):
      sessionid = request["uri-suffix"]
      if Sessions.has_key(sessionid):
          session = Sessions[sessionid]
          if session["busy"]:
              return ErrorPages.websiteErrorPage(500, "Session handler busy")
          else:
              return session["handler"]
      else:
          session = { "busy": True, "handler": websiteSessionExampleComponent(sessionid) }
          Sessions[sessionid] = session
          return session["handler"]
  
          
  class websiteSessionExampleComponent(component):
      def __init__(self, sessionid):
          super(websiteSessionExampleComponent, self).__init__()
          self.sessionid = sessionid
          
      def main(self):
          counter = 0
          while 1:
              counter += 1
              resource = {
                  "statuscode" : "200",
                  "data" : u"<html><body>%d</body></html>" % counter,
                  "incomplete" : False,
                  "type"       : "text/html"
              }
              self.send(resource, "outbox")
              self.send(producerFinished(self), "signal")
              Sessions[self.sessionid]["busy"] = False
              self.pause()
              yield 1
              
  