def open(self): """ 1, 检查当前客户端时候已经打开浏览器窗口,是,发送错误提示信息 """ email = self.get_secure_cookie('email') nickname = self.get_secure_cookie('nickname') if ClientManager.is_client_connected(email): app_log.exception("client[{0}] already connected!".format(email)) self.write_message({ 'type': 'system.error', 'message': '检测到当前用户已经打开一个窗口,当前窗口自动失效' }) else: clients = ClientManager.get_clients() # 保存客户端信息 ClientManager.add_client(str(id(self)), nickname=nickname, email=email, handler=self) data = { 'type': 'add', 'clients': [] } for key in clients.keys(): client = clients[key] data['clients'].append({ "type": "add", "id": client.identity, "nickname": client.nickname, "avatar": client.avatar, "email": client.email }) self.send_to_all(json.dumps(data))
def on_close(self): email = self.get_secure_cookie('email') _id = str(id(self)) if ClientManager.is_effective_connect(_id): ClientManager.remove_client(email) try: data = { "type": "out", "id": _id } self.send_to_all(json.dumps(data)) except Exception as ex: app_log.exception(ex) else: app_log.info("非有效连接,关闭页面不影响其他已经打开的页面")
def post(self): nickname = self.get_argument("nickname") email = self.get_argument("email") if ClientManager.get_client_by_email(email): self.render("login.html", error="邮箱正在使用中...", background = None) self.set_secure_cookie('email', email) self.set_secure_cookie('nickname', nickname) self.redirect("/chat")
def post(self): nickname = self.get_argument("nickname") email = self.get_argument("email") if ClientManager.get_client_by_email(email): self.render("login.html", error="邮箱正在使用中...", background=None) self.set_secure_cookie('email', email) self.set_secure_cookie('nickname', nickname) self.redirect("/chat")
def work(self, item): """ @param item: redis 消息对象 """ print ">>>>>>>>>>>>>>>>>>>>>>>>>>>>" data = item['data'] if data == 1L: return app_log.info(data) try: data = json.loads(data) if data.get('to_email') and (data.get('to_email') != 'groups'): ClientManager.send_to(data.get('from_email'), data.get('to_email'), data) else: ClientManager.send_to_all(data) except Exception as ex: app_log.exception(ex)
def send_to_all(self, data): ClientManager.publish(self.settings['redis'], options.redis_channel, data)