/** * Author: zero * Created: 2012-8-22 */ package com.cwa.petserver.memory.activeuser; import java.util.List; /** * 非活跃玩家的内存维护工具,将非活跃的玩家从内存池中清除出去。 * @author zero */ public class InactiveUserMaintainer implements IMaintainer { /** * 玩家多久不上算非活跃 */ private static final long INACTIVE_USER_THRESHOLD = 6L * 60L * 1000L; @Override public void filter(ActiveUserPool pool) { maintain(pool, ActiveUserConstant.MIN_LEVEL, ActiveUserConstant.MAX_LEVEL); } private void maintain(ActiveUserPool pool, int minLevel, int maxLevel) { long now = System.currentTimeMillis(); for (int i = minLevel; i < maxLevel; ++i) { List<Integer> idList = pool.getUserListClone(i); for (Integer id : idList) { ActiveUser user = pool.getUser(id); if (isInactiveUser(user, now, INACTIVE_USER_THRESHOLD)) { pool.removeUser(id); } } } } /** * 是否是非活跃玩家 * @param user 待判断的玩家 * @param now 当前时间 * @param threshold 多久没上线算是非活跃玩家,毫秒 * @return */ private boolean isInactiveUser(ActiveUser user, long now, long threshold) { if (user.isOnline() || user.getLastUpdateTime() < now - threshold) { return false; } return true; } }