示例#1
0
 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)
示例#2
0
 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)
示例#3
0
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
示例#4
0
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)
示例#5
0
                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.
示例#6
0
    会导致关闭/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")
示例#7
0
    会导致关闭/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")