package org.manalith.ircbot.plugin.et;
import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class PlayerManager {
private static PlayerManager _instance;
private static final String MEMBER_LIST_DB = "et_members.xml";
public static PlayerManager instance() {
if (_instance == null)
_instance = new PlayerManager();
return _instance;
}
private PlayerManager() {
load();
}
private List<Player> list;
public String getPlayerNicks() {
StringBuilder sb = new StringBuilder();
for (Player p : list) {
sb.append(p.getIRCName()).append(" ");
}
return sb.toString();
}
public String getReadyNicks() {
StringBuilder sb = new StringBuilder();
for (Player p : list) {
if (p.isReady())
sb.append(p.getIRCName()).append(" ");
}
return sb.toString();
}
@SuppressWarnings("unchecked")
public void load() {
if (list == null) {
try {
FileInputStream os = new FileInputStream(MEMBER_LIST_DB);
XMLDecoder decoder = new XMLDecoder(os);
list = (List<Player>) decoder.readObject();
// Player p = (Player)decoder.readObject();
decoder.close();
} catch (IOException ex) {
// ignore
list = new ArrayList<>();
}
}
}
public void add(Player player) throws AlreadyRegisteredException {
for (Player p : list) {
if (p.equals(player)) {
throw new AlreadyRegisteredException();
}
}
list.add(player);
}
public void remove(Player player) throws NotRegisteredException {
boolean removed = false;
for (Player p : list) {
if (p.equals(player)) {
list.remove(p);
removed = true;
break;
}
}
if (!removed)
throw new NotRegisteredException();
}
public void setReady(Player player) throws NotRegisteredException {
boolean changed = false;
for (Player p : list) {
if (p.equals(player)) {
p.setReady(true);
changed = true;
break;
}
}
if (!changed)
throw new NotRegisteredException();
}
public void save() {
if (list != null) {
try {
FileOutputStream os = new FileOutputStream(MEMBER_LIST_DB);
XMLEncoder encoder = new XMLEncoder(os);
encoder.writeObject(list);
encoder.close();
} catch (IOException ex) {
// ignore
}
}
}
}