Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import logging
- import os
- from eventlet import wsgi, api
- from paste import urlmap
- from paste.fileapp import DirectoryApp
- from rtjpprotocol import RTJPFrame
- from csp.eventlet import Listener
- class DebugLogger(object):
- def __init__(self):
- self.log = logging.getLogger(__name__)
- self.log.addHandler(logging.StreamHandler())
- self.write = self.log.debug
- # this is very nearly the hookbox server - thanks, mcarter
- class WSGICSPServer(object):
- def __init__(self, interface, port):
- self.interface = interface
- self.port = port
- self.app = urlmap.URLMap()
- self.controllers = []
- def run(self):
- api.spawn(wsgi.server,
- api.tcp_listener((self.interface, self.port)),
- self.app, log=DebugLogger())
- for app, controller in self.controllers:
- api.spawn(self._run_app, app, controller)
- def __call__(self, environ, start_response):
- return self.app(environ, start_response)
- def _add_app(self, prefix, app):
- self.app[prefix] = app
- def add_wsgi_app(self, prefix, app):
- self._add_app(prefix, app)
- def add_csp_app(self, prefix, csp_controller):
- app = Listener()
- self._add_app(prefix, app)
- self.controllers.append((app, csp_controller))
- def _run_app(self, app, csp_controller):
- while True:
- try:
- sock, addr_info = p.accept()
- csp_controller(sock)
- except:
- raise
- break
- class Announcer(object):
- def __init__(self, sock):
- self.sock = sock
- self._frame_id = 1
- api.spawn(self._announce_start)
- def send_data(self, data):
- data = dict(announcement=data)
- frame = RTJPFrame(self._frame_id, 'data', data)
- self._frame_id += 1
- self.sock.send(frame.as_json())
- def _announce_start(self):
- self.send_data("now announcing<br/>")
- n = 1
- while True:
- self._make_announcement(n)
- api.sleep(3)
- n += 1
- def _make_announcement(self, n):
- announcement = 'announcement: %s' % n
- print "sending: %r" % announcement
- self.send_data(announcement)
- class AnnounceServer(WSGICSPServer):
- def __init__(self, *args, **kwargs):
- super(AnnounceServer, self).__init__(*args, **kwargs)
- self.add_csp_app('/csp', Announcer)
- self.add_wsgi_app('/static', DirectoryApp('static'))
- if __name__ == "__main__":
- server = AnnounceServer('0.0.0.0', 8989)
- server.run()
- while True:
- try:
- api.sleep(10)
- except KeyboardInterrupt:
- print "Ctr+C pressed; Exiting."
- break
Add Comment
Please, Sign In to add comment