chat_handlers.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. """
  2. handlers.py - 用户登录和聊天的处理器
  3. """
  4. import tornado.web
  5. import tornado.websocket
  6. nicknames = set()
  7. connections = {}
  8. class LoginHandler(tornado.web.RequestHandler):
  9. def get(self):
  10. self.render('login.html', hint='')
  11. def post(self):
  12. nickname = self.get_argument('nickname')
  13. if nickname in nicknames:
  14. self.render('login.html', hint='昵称已被使用,请更换昵称')
  15. self.set_secure_cookie('nickname', nickname)
  16. self.render('chat.html')
  17. class ChatHandler(tornado.websocket.WebSocketHandler):
  18. def open(self):
  19. nickname = self.get_secure_cookie('nickname').decode()
  20. nicknames.add(nickname)
  21. for conn in connections.values():
  22. conn.write_message(f'~~~{nickname}进入了聊天室~~~')
  23. connections[nickname] = self
  24. def on_message(self, message):
  25. nickname = self.get_secure_cookie('nickname').decode()
  26. for conn in connections.values():
  27. if conn is not self:
  28. conn.write_message(f'{nickname}说:{message}')
  29. def on_close(self):
  30. nickname = self.get_secure_cookie('nickname').decode()
  31. del connections[nickname]
  32. nicknames.remove(nickname)
  33. for conn in connections.values():
  34. conn.write_message(f'~~~{nickname}离开了聊天室~~~')