示例#1
0
    def get(self):
        send_welcome = False
        user = self.get_secure_cookie("user")
        room_id = redis.lobby_room_id
        redis.UserManager.user_add(room_id, user, self)

        # if user login into lobby first time, send welcome message
        if redis.UserManager.user_welcome(user):
            message = {
                "id": str(uuid.uuid4()),
                "user": user,
                "time": time.strftime("%H:%M:%S"),
                "type": "welcome_message",
            }
            message["body"] = user
            message["html"] = self.render_string("message.html", message=message)
            room_waiters = redis.WaiterManager.get_waiters_for_room_id(room_id)
            for callback in room_waiters:
                try:
                    # 增加消息类型,让客户端js舍弃此次消息的id,而使用上次的
                    callback([message], "welcome_message")
                except Exception, e:
                    LOG.error("Error in waiter callback", exc_info=True)
                    LOG.exception(e)
            redis.WaiterManager.empty_waiter(room_id)

            multicast_sender(dict(user=user, message=[message]), "send_welcome")
            send_welcome = True
示例#2
0
    def get(self):
        send_welcome = False
        user = self.get_secure_cookie("user")
        room_id = redis.lobby_room_id
        redis.UserManager.user_add(room_id, user, self)

        # if user login into lobby first time, send welcome message
        if redis.UserManager.user_welcome(user):
            message = {
                "id": str(uuid.uuid4()),
                "user": user,
                "time": time.strftime("%H:%M:%S"),
                "type": "welcome_message",
            }
            message['body'] = user
            message["html"] = self.render_string("message.html",
                                                 message=message)
            room_waiters = redis.WaiterManager.get_waiters_for_room_id(room_id)
            for callback in room_waiters:
                try:
                    # 增加消息类型,让客户端js舍弃此次消息的id,而使用上次的
                    callback([message], "welcome_message")
                except Exception, e:
                    LOG.error("Error in waiter callback", exc_info=True)
                    LOG.exception(e)
            redis.WaiterManager.empty_waiter(room_id)

            multicast_sender(dict(user=user, message=[message]),
                             "send_welcome")
            send_welcome = True
示例#3
0
def handler_signal(signum, frame):
    # if process receive SIGNINT/SITTERM/SIGQUIT
    # stop the server
    if signum == 2 or signum == 3 or signum == 15:
        LOG.error("Receive signal: %s" % signum)
        LOG.error("Server quit.")
        server_stop()
    elif signum == 14:  # ignore SIGALARM
        pass
示例#4
0
def handler_signal(signum, frame):
    # if process receive SIGNINT/SITTERM/SIGQUIT
    # stop the server
    if signum == 2 or signum == 3 or signum == 15:
        LOG.error("Receive signal: %s" % signum)
        LOG.error("Server quit.")
        server_stop()
    elif signum == 14:  # ignore SIGALARM
        pass
示例#5
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)
示例#6
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)
示例#7
0
    def wait_for_messages(self, callback, room_id, user, cursor=None):
        if cursor:
            index = 0
            msg_cache = redis.MessageCacheManager.get_msg_for_room_id(room_id)
            for i in xrange(len(msg_cache)):
                index = len(msg_cache) - i - 1
                if msg_cache[index]["id"] == cursor:
                    break

            recent = msg_cache[index + 1:]
            if recent:
                try:
                    callback(recent)
                except Exception, e:
                    LOG.error("Error in waiter callback", exc_info=True)
                    LOG.exception(e)
示例#8
0
    def wait_for_messages(self, callback, room_id, user, cursor=None):
        if cursor:
            index = 0
            msg_cache = redis.MessageCacheManager.get_msg_for_room_id(room_id)
            for i in xrange(len(msg_cache)):
                index = len(msg_cache) - i - 1
                if msg_cache[index]["id"] == cursor:
                    break

            recent = msg_cache[index + 1 :]
            if recent:
                try:
                    callback(recent)
                except Exception, e:
                    LOG.error("Error in waiter callback", exc_info=True)
                    LOG.exception(e)