package net.minecraft.launcher.ui.sidebar;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import java.awt.GridBagConstraints;
import java.net.URL;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ThreadPoolExecutor;
import javax.swing.JLabel;
import net.minecraft.launcher.Http;
import net.minecraft.launcher.Launcher;
import net.minecraft.launcher.updater.LowerCaseEnumTypeAdapterFactory;
import net.minecraft.launcher.updater.VersionManager;
public class StatusPanelForm extends SidebarGridForm
{
private static final String SERVER_SESSION = "session.minecraft.net";
private static final String SERVER_LOGIN = "login.minecraft.net";
private final Launcher launcher;
private final JLabel sessionStatus = new JLabel("???");
private final JLabel loginStatus = new JLabel("???");
private final Gson gson = new GsonBuilder().registerTypeAdapterFactory(new LowerCaseEnumTypeAdapterFactory()).create();
public StatusPanelForm(Launcher launcher) {
super("Service Status");
this.launcher = launcher;
createInterface();
refreshStatuses();
}
protected void populateGrid(GridBagConstraints constraints)
{
add(new JLabel("Multiplayer:", 2), constraints, 0, 0, 0, 1, 17);
add(this.sessionStatus, constraints, 1, 0, 1, 1);
add(new JLabel("Login:", 2), constraints, 0, 1, 0, 1, 17);
add(this.loginStatus, constraints, 1, 1, 1, 1);
}
public JLabel getSessionStatus() {
return this.sessionStatus;
}
public JLabel getLoginStatus() {
return this.loginStatus;
}
public void refreshStatuses() {
this.launcher.getVersionManager().getExecutorService().submit(new Runnable()
{
public void run() {
try {
TypeToken token = new TypeToken()
{
};
List statuses = (List)StatusPanelForm.this.gson.fromJson(Http.performGet(new URL("http://status.mojang.com/check"), StatusPanelForm.this.launcher.getProxy()), token.getType());
for (Map serverStatusInformation : statuses)
if (serverStatusInformation.containsKey("login.minecraft.net"))
StatusPanelForm.this.loginStatus.setText(StatusPanelForm.ServerStatus.access$200((StatusPanelForm.ServerStatus)serverStatusInformation.get("login.minecraft.net")));
else if (serverStatusInformation.containsKey("session.minecraft.net"))
StatusPanelForm.this.sessionStatus.setText(StatusPanelForm.ServerStatus.access$200((StatusPanelForm.ServerStatus)serverStatusInformation.get("session.minecraft.net")));
}
catch (Exception e)
{
Launcher.getInstance().println("Couldn't get server status", e);
}
}
});
}
public static enum ServerStatus {
GREEN("Online, no problems detected."),
YELLOW("May be experiencing issues."),
RED("Offline, experiencing problems.");
private final String title;
private ServerStatus(String title) {
this.title = title;
}
}
}