/**
* Author: zero
* Created: 2012-8-22
*/
package com.cwa.petserver.memory.activeuser;
import com.cwa.IActiveUserManager;
import java.util.List;
/**
* 对外使用的活跃玩家随机抓取工具
* @author zero
*/
public enum ActiveUserManager implements IActiveUserManager
{
// 单例,拒绝继承
INSTANCE;
ActiveUserPool pool;
ISearchAlgo algo;
IMaintainer maintainer;
ActiveUserManager()
{
pool = new ActiveUserPool();
maintainer = new InactiveUserMaintainer();
algo = new RandomSearchAlgo();
}
/**
* 开始清理非活跃用户
*/
public void maintain()
{
maintainer.filter(pool);
}
/**
* @see IActiveUserManager#randomUsers(int, int)
*/
@Override
public List<Integer> randomUsers(int amount, int level)
{
return algo.getRandomUser(pool, level, amount);
}
/**
* @see IActiveUserManager#randomUsersAroundLevel(int, int)
*/
@Override
public List<Integer> randomUsersAroundLevel(int amount, int level)
{
return randomUsers(amount, level);
}
/**
* 将一个列表的玩家放入到指定等级的玩家容器中。放入后会将之前的列表移除。(在初始化的
* 时候读取DB使用)
* @param level 指定的等级
* @param users 待放入的玩家列表
*/
public void pushUser(int level, List<ActiveUser> users)
{
pool.pushUsers(level, users);
}
/**
* @see IActiveUserManager#userOnline(int, int)
*/
@Override
public void userOnline(int roleId, int level)
{
ActiveUser user = pool.getUser(roleId);
if (null == user) {
pool.addUser(level, new ActiveUser(roleId, level));
} else {
user.setOnline(true);
user.setLastUpdateTime(System.currentTimeMillis());
pool.updateUser(user);
}
}
/**
* @see IActiveUserManager#userOffline(int, int)
*/
@Override
public void userOffline(int roleId, int level)
{
ActiveUser user = pool.getUser(roleId);
if (null == user) {
user = new ActiveUser(roleId, level);
user.setOnline(false);
pool.addUser(level, user);
} else {
user.setOnline(false);
user.setLastUpdateTime(System.currentTimeMillis());
pool.updateUser(user);
}
}
}