def new_messages(self, messages, room_id): room_waiters = redis.WaiterManager.get_waiters_for_room_id(room_id) LOG.warning("Server sending new message to %r listeners" % len(room_waiters)) for callback in room_waiters: try: callback(messages) except Exception, e: LOG.error("Error in waiter callback", exc_info=True) LOG.exception(e)
def multicast_sender(messages, msg_type, local_node_id=None): """ Send message to multicast channel. messages: message need to send. msg_type: type of message, can be "message" or "command". """ msg = dict( node_id = local_node_id, msg_type = msg_type, body = messages ) msg = str(msg) msg = crypter.encrypt(msg) try: if sender(msg): LOG.warning("Send %d to multicast channel." % len(messages)) except Exception, e: return False
def multicast_processor(conn, local_node_id=None): data, address = conn.recvfrom(1024) data = crypter.decrypt(data) data = eval(data) remote_node_id = data['node_id'] msg_type = data['msg_type'] body = data['body'] if remote_node_id != local_node_id: if msg_type == "message": room_id = body[0]['room_id'] waiters = redis.WaiterManager.get_waiters_for_room_id(room_id) if waiters: for waiter in waiters: try: waiter(body) except Exception, e: LOG.exception(e) redis.WaiterManager.empty_waiter(room_id) LOG.warning("Receive [normal chat] message and send to %r listeners." % len(waiters)) elif msg_type == "command": cmd = body['cmd'] if "add_chatroom" == cmd: room_id = body['room_id'] if redis.ChatroomManager.add_local_chat_room(room_id): LOG.warning("Receive command add chat room %d." % room_id) elif "del_chatroom" == cmd: pass elif msg_type == "p2p_chat": user = body['user'] message = body['message'] user_waiters = redis.UserManager.is_local_user(user.encode('utf-8')) if user_waiters: for waiter in user_waiters: try: waiter(message) except Exception, e: LOG.exception(e) LOG.warning("Receive [p2p] message and send to %s listeners." % user)
for waiter in user_waiters: try: waiter(message) except Exception, e: LOG.exception(e) LOG.warning("Receive [p2p] message and send to %s listeners." % user) elif msg_type == "broadcast": message = body['message'] waiters = redis.WaiterManager.get_all_local_waiter() for waiter in waiters: try: waiter(message) except Exception, e: LOG.exception(e) LOG.warning("Receive [broadcast] message and send to %s listeners." % len(waiters)) elif msg_type == "send_welcome": message = body['message'] waiters = redis.WaiterManager.get_all_local_waiter() for waiter in waiters: try: waiter(message) except Exception, e: LOG.exception(e) LOG.warning("Receive [welcome] message and send to %s listeners." % len(waiters)) def multicast_sender(messages, msg_type, local_node_id=None): """ Send message to multicast channel.
会导致关闭/poll_message连接,发送offline ''' message = dict(user=user, on_off=on_off) if on_off == "online": message["remote_ip"] = kwargs.pop("remote_ip") room_waiters = redis.WaiterManager.get_waiters_for_room_id(room_id) try: for waiter in room_waiters: waiter(message, "online_offline") except Exception, e: LOG.exception(e) redis.WaiterManager.empty_waiter(room_id) LOG.warning("User %s has %s from room %s." % (user, on_off, room_id)) class WebHandler(RequestHandler): def compute_etag(self): return class MainHandler(WebHandler): def get(self): self.render("index.html") class LoginHandler(WebHandler): def get(self): user = self.get_secure_cookie("user")
会导致关闭/poll_message连接,发送offline """ message = dict(user=user, on_off=on_off) if on_off == "online": message["remote_ip"] = kwargs.pop("remote_ip") room_waiters = redis.WaiterManager.get_waiters_for_room_id(room_id) try: for waiter in room_waiters: waiter(message, "online_offline") except Exception, e: LOG.exception(e) redis.WaiterManager.empty_waiter(room_id) LOG.warning("User %s has %s from room %s." % (user, on_off, room_id)) class WebHandler(RequestHandler): def compute_etag(self): return class MainHandler(WebHandler): def get(self): self.render("index.html") class LoginHandler(WebHandler): def get(self): user = self.get_secure_cookie("user")