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
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
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
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 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)
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)