45 lines
1.3 KiB
Python
45 lines
1.3 KiB
Python
"""
|
|
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}离开了聊天室~~~')
|