package com.metazion.object;
import java.util.ArrayList;
import java.util.HashMap;
import com.metazion.jgd.util.JgdLogger;
public class PlayerManager {
private HashMap<Integer, Player> playerMap = new HashMap<Integer, Player>();
private HashMap<Integer, Integer> accountPlayerMap = new HashMap<Integer, Integer>();
private ArrayList<Player> expiredPlayerList = new ArrayList<Player>();
public PlayerManager() {
}
public boolean init() {
JgdLogger.getLogger().info("Player manager init...");
return true;
}
public void start() {
JgdLogger.getLogger().info("Player manager start...");
}
public void stop() {
JgdLogger.getLogger().info("Player manager stop...");
}
public void tick(long iterval) {
expiredPlayerList.clear();
for (Player player : playerMap.values()) {
player.tick(iterval);
if (player.isExpired()) {
expiredPlayerList.add(player);
}
}
for (Player player : expiredPlayerList) {
removePlayerMapping(player);
}
}
public void shutdownGracefully() {
JgdLogger.getLogger().info("Player manager shutdownGracefully...");
expiredPlayerList.clear();
for (Player player : playerMap.values()) {
expiredPlayerList.add(player);
}
for (Player player : expiredPlayerList) {
removePlayerMapping(player);
}
}
public void putPlayerMapping(Player player) {
final int playerId = player.getId();
final int account = player.getAccount();
putPlayer(playerId, player);
putAccountPlayer(account, playerId);
player.enter();
}
public void removePlayerMapping(Player player) {
final int playerId = player.getId();
final int account = player.getAccount();
player.leave();
removeAccountPlayer(account);
removePlayer(playerId);
}
public Player getPlayerByAccount(int account) {
Integer playerId = getAccountPlayer(account);
if (playerId != null) {
return getPlayer(playerId);
}
return null;
}
public Player getPlayerById(int playerId) {
return getPlayer(playerId);
}
public int getAccountSize() {
return accountPlayerMap.size();
}
public int getPlayerSize() {
return playerMap.size();
}
public void kickPlayer(int playerId) {
Player player = getPlayer(playerId);
if (player != null) {
player.setExpired(true);
}
}
public void kickAllPlayer() {
for (Player player : playerMap.values()) {
player.setExpired(true);
}
}
private Player getPlayer(int playerId) {
return playerMap.get(playerId);
}
private void putPlayer(int playerId, Player player) {
playerMap.put(playerId, player);
}
private void removePlayer(int playerId) {
playerMap.remove(playerId);
}
private Integer getAccountPlayer(int account) {
return accountPlayerMap.get(account);
}
private void putAccountPlayer(int account, int playerId) {
accountPlayerMap.put(account, playerId);
}
private void removeAccountPlayer(int account) {
accountPlayerMap.remove(account);
}
}