chatroom.py 2.2 KB

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