chatroom.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #!/usr/bin/env python
  2. import tornado
  3. import tornado.web
  4. import tornado.websocket
  5. import tornado.options
  6. import os
  7. import json
  8. import uuid
  9. import argparse
  10. import logging
  11. logger = logging.getLogger('gateway')
  12. args = None
  13. def parse_args():
  14. global args
  15. static_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'static'))
  16. parser = argparse.ArgumentParser(description='Gateway server')
  17. parser.add_argument('-v', '--verbose', help='verbose logging', action='store_true')
  18. parser.add_argument('-s', '--static-path', help='path for static files [default: %(default)s]', default=static_path)
  19. parser.add_argument('-p', '--listen-port', help='port to listen on [default: %(default)s]', default=9000, type=int, metavar='PORT')
  20. parser.add_argument('-i', '--listen-interface', help='interface to listen on. [default: %(default)s]', default='0.0.0.0', metavar='IFACE')
  21. args = parser.parse_args()
  22. connections = set()
  23. class ChatHandler(tornado.websocket.WebSocketHandler):
  24. def open(self):
  25. connections.add(self)
  26. return None
  27. def on_message(self, msg):
  28. for c in connections:
  29. if c is self:
  30. continue
  31. c.write_message(msg)
  32. def on_close(self):
  33. connections.remove(self)
  34. def main():
  35. global logger
  36. #tornado.options.parse_command_line()
  37. parse_args()
  38. if args.verbose:
  39. tornado.options.enable_pretty_logging()
  40. logger = logging.getLogger()
  41. logger.setLevel(logging.INFO)
  42. application = tornado.web.Application([
  43. (r"/chat", ChatHandler),
  44. (r"/(.*)", tornado.web.StaticFileHandler, {"path": args.static_path, "default_filename":'index.html'}),
  45. ],
  46. )
  47. print "Listening on %s:%s" % (args.listen_interface, args.listen_port)
  48. application.listen(args.listen_port, args.listen_interface)
  49. tornado.ioloop.IOLoop.instance().start()
  50. if __name__ == "__main__":
  51. main()