package pspnetparty.lib.constants;
import java.io.File;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Iterator;
import pspnetparty.lib.IniFile;
import pspnetparty.lib.IniSection;
public class IniPublicServerRegistry implements IServerRegistry {
private static final String FILE_NAME = "PublicServerList";
private static final String PORTAL_SERVER_LIST = "PortalServers";
private static final String ROOM_SERVER_LIST = "RoomServers";
private static final String SEARCH_SERVER_LIST = "SearchServers";
private static final String LOBBY_SERVER_LIST = "LobbyServers";
private File file;
private long lastModified;
private IniSection section;
private String[] portalServers;
private String[] roomServers;
private String[] searchServers;
private String[] lobbyServers;
public IniPublicServerRegistry() throws IOException {
file = new File(FILE_NAME);
lastModified = file.lastModified();
IniFile iniFile = new IniFile(FILE_NAME);
section = iniFile.getSection(null);
}
public String[] getPortalServers() {
if (portalServers == null) {
portalServers = section.get(PORTAL_SERVER_LIST, "").split(",");
}
return portalServers;
}
public String[] getRoomServers() {
if (roomServers == null) {
roomServers = section.get(ROOM_SERVER_LIST, "").split(",");
}
return roomServers;
}
public String[] getSearchServers() {
if (searchServers == null) {
searchServers = section.get(SEARCH_SERVER_LIST, "").split(",");
}
return searchServers;
}
public String[] getLobbyServers() {
if (lobbyServers == null) {
lobbyServers = section.get(LOBBY_SERVER_LIST, "").split(",");
}
return lobbyServers;
}
public Iterator<String> getPortalRotator() {
return new Iterator<String>() {
int index;
{
String[] list = getPortalServers();
index = (int) (Math.random() * list.length);
}
@Override
public void remove() {
}
@Override
public String next() {
String[] list = getPortalServers();
if (list.length == 0)
return null;
if (index >= list.length)
index = 0;
String s = list[index];
index++;
return s;
}
@Override
public boolean hasNext() {
String[] list = getPortalServers();
return list.length > 0;
}
};
}
@Override
public void reload() {
if (lastModified >= file.lastModified())
return;
try {
IniFile iniFile = new IniFile(FILE_NAME);
section = iniFile.getSection(null);
portalServers = null;
roomServers = null;
searchServers = null;
lobbyServers = null;
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public boolean isValidPortalServer(InetAddress address) {
for (String server : getPortalServers()) {
try {
String[] tokens = server.split(":");
InetAddress serverAddress = InetAddress.getByName(tokens[0]);
if (serverAddress.equals(address))
return true;
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
return false;
}
}