""" handlers.py - 用户登录和聊天的处理器 """ import tornado.web import tornado.websocket nicknames = set() connections = {} class LoginHandler(tornado.web.RequestHandler): def get(self): self.render('login.html', hint='') def post(self): nickname = self.get_argument('nickname') if nickname in nicknames: self.render('login.html', hint='昵称已被使用,请更换昵称') self.set_secure_cookie('nickname', nickname) self.render('chat.html') class ChatHandler(tornado.websocket.WebSocketHandler): def open(self): nickname = self.get_secure_cookie('nickname').decode() nicknames.add(nickname) for conn in connections.values(): conn.write_message(f'~~~{nickname}进入了聊天室~~~') connections[nickname] = self def on_message(self, message): nickname = self.get_secure_cookie('nickname').decode() for conn in connections.values(): if conn is not self: conn.write_message(f'{nickname}说:{message}') def on_close(self): nickname = self.get_secure_cookie('nickname').decode() del connections[nickname] nicknames.remove(nickname) for conn in connections.values(): conn.write_message(f'~~~{nickname}离开了聊天室~~~')