package com.cwa.qiji; import com.cwa.IActiveUserManager; import java.util.List; import org.apache.log4j.Logger; /** * 对外使用的活跃玩家随机抓取工具。 * @see IActiveUserManager */ public class ActiveUserManager implements IActiveUserManager { private static final Logger logger = Logger.getLogger(ActiveUserManager.class); private ActiveUserCache cache; private ActiveUserStore store; public ActiveUserManager(ActiveUserManagerConfig config) { cache = new ActiveUserCache(config.getMinLevel(), config.getMaxLevel(), config.getLevelsPerGroup(), config.getUsersPerGroup()); store = new FileActiveUserStore(config.getDataFile()); store.load(cache); } /** * @see IActiveUserManager#randomUsers(int, int) */ @Override public List<Integer> randomUsers(int amount, int level) { return cache.getRaodomUsers(level, amount); } /** * @see IActiveUserManager#randomUsersAroundLevel(int, int) */ @Override public List<Integer> randomUsersAroundLevel(int amount, int level) { return cache.getRandomUsersAround(level, amount); } /** * @see IActiveUserManager#userOffline(int, int) */ @Override public void userOffline(int roleId, int level) { // 啥也不干 } /** * @see IActiveUserManager#userOnline(int, int) */ @Override public void userOnline(int roleId, int level) { cache.update(roleId, level); } // 将内存缓存保存到某个地方一遍下次服务器重启时恢复 public void saveActiveUsers() { logger.debug("Save active users..."); store.save(cache); } public String toDebugString() { StringBuilder buf = new StringBuilder("ActiveUserManager:\n"); ActiveUserCachePage[] page = cache.getPages(); for (int i = 0; i < page.length; i++) { buf.append("page ").append(i + 1).append(":"); buf.append(page[i].getAllUsers()); buf.append("\n"); } return buf.toString(); } }