package com.metazion.jgd.info;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import org.json.JSONArray;
import org.json.JSONObject;
import com.metazion.jgd.def.ServerBean;
import com.metazion.jgd.util.JgdLogger;
import com.metazion.jm.util.FileUtil;
public class ServerInfoManager {
private HashMap<Integer, ServerInfo> serverInfoMap = new HashMap<Integer, ServerInfo>();
private static ServerInfoManager singleton = new ServerInfoManager();
public static ServerInfoManager getInstance() {
return singleton;
}
private ServerInfoManager() {
}
public boolean load() {
String path = FileUtil.getAbsolutePath("data/config/server_list.json");
try {
InputStream is = new FileInputStream(path);
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
BufferedReader br = new BufferedReader(isr);
String content = "";
String line = null;
while ((line = br.readLine()) != null) {
content += line;
}
is.close();
loadServerInfo(content);
} catch (Exception e) {
JgdLogger.getLogger().error("Load server list failed: file[{}] exception[{}]", path, e.toString());
return false;
}
return true;
}
public int GetServerInfoSize() {
return serverInfoMap.size();
}
public ServerInfo getServerInfo(int id) {
return serverInfoMap.get(id);
}
public HashMap<Integer, ServerInfo> getAllServerInfo() {
return serverInfoMap;
}
public String info() {
String info = "Login All Game Info As Below:\n";
info += String.format(" game size[%d]\n", serverInfoMap.size());
for (ServerInfo serverInfo : serverInfoMap.values()) {
ServerBean serverBean = serverInfo.serverBean;
info += String.format(" game id[%d] name[%s] status[%d] host[%s] port[%d] crowd threshold[%d] full threshold[%d] player number[%d]\n", serverBean.id, serverBean.name, serverBean.status, serverInfo.host, serverInfo.port, serverInfo.crowdThreshold, serverInfo.fullThreshold, serverInfo.playerNumber);
}
return info;
}
private void loadServerInfo(String content) throws Exception {
serverInfoMap.clear();
JSONArray jsonArray = new JSONArray(content);
for (int index = 0; index < jsonArray.length(); index++) {
JSONObject jsonObject = jsonArray.getJSONObject(index);
ServerInfo serverInfo = new ServerInfo();
serverInfo.serverBean.id = jsonObject.getInt("id");
serverInfo.serverBean.name = jsonObject.getString("name");
serverInfoMap.put(serverInfo.serverBean.id, serverInfo);
}
}
}