def on_server_exit(): room_userlist_all = userlist_prefix + room_prefix + "[0-9]*" keys = c.keys(room_userlist_all) for key in keys: users = c.smembers(key) for user in users: c.delete(user) c.delete(key)
def get_room_list(): lists = list() all_room_keys = c.keys(room_prefix + "[0-9]*") for room_key in all_room_keys: temp = dict() room_id = int(c.hget(room_key, "room_id")) if room_id != lobby_room_id: temp['room_id'] = room_id temp['room_magic_id'] = c.hget(room_key, "room_magic_id") temp['room_name'] = c.hget(room_key, "room_name") temp['room_max_user'] = c.hget(room_key, "room_max_user"), temp['room_waiter_list'] = len(ChatroomManager.get_users_for_room_id(room_id)) lists.append(temp) lists.sort() return lists
def get_all_user_info(): ''' 返回所有房间的用户,和用户的详细信息 ''' userlist_all = userlist_prefix + room_prefix + "[0-9]*" keys = c.keys(userlist_all) final_list = list() for key in keys: room_list = dict() room_list[key] = list() room_users = c.smembers(key) for user in room_users: user_detail = dict() user_detail[user] = c.hgetall(user) room_list[key].append(user_detail) final_list.append(room_list) return final_list
def userinfo_del(user): """ 因为这个用户信息是不和任何房间关联的 所以要先判断用户,是否已经不在任何聊天室内 如果是则删除用户 """ userlist_all = userlist_prefix + room_prefix + "[0-9]*" keys = c.keys(userlist_all) for key in keys: users = list(c.smembers(key)) if user in users: return # 不删除用户的信息, 在userinfo_add中覆盖 # 否则浏览器刷新会导致调用user_del # 改为设置用户离线标志 # c.delete(user) c.hdel(user, "offline")
def user_del(room_id=None, user=None): # 如果用户访问/logout, 循环删除多个房间内的同一个用户 # 否则只是用户关闭了浏览器标签, 删除对应房间的用户 if not room_id: userlist_all = userlist_prefix + room_prefix + "[0-9]*" keys = c.keys(userlist_all) for key in keys: if c.sismember(key, user): c.srem(key, user) else: cls = UserManager # 首先从删除某个房间内的用户 userlist_set = userlist_prefix + room_prefix + str(room_id) c.srem(userlist_set, user) # 再判断此用户是否还在别的房间,如果不是则删除用户 # 删除用户已改为设置用户离线标志 cls.userinfo_del(user)
def get_room_list(): lists = list() all_room_keys = c.keys(room_prefix + "[0-9]*") for room_key in all_room_keys: temp = dict() room_id = int(c.hget(room_key, "room_id")) if room_id != lobby_room_id: temp['room_id'] = room_id temp['room_magic_id'] = c.hget(room_key, "room_magic_id") temp['room_name'] = c.hget(room_key, "room_name") temp['room_max_user'] = c.hget(room_key, "room_max_user"), temp['room_waiter_list'] = len( ChatroomManager.get_users_for_room_id(room_id)) lists.append(temp) lists.sort() return lists
def magic_2_normal(magic_id): room_keys = c.keys(room_prefix + "[0-9]*") for room in room_keys: if c.hget(room, "room_magic_id") == magic_id: return int(c.hget(room, "room_id"))