package net.minecraft.client.gui;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.io.IOException;
import java.net.ConnectException;
import java.net.SocketTimeoutException;
import java.net.UnknownHostException;
import net.minecraft.client.multiplayer.ServerData;
import net.minecraft.util.EnumChatFormatting;

@SideOnly(Side.CLIENT)
class ThreadPollServers extends Thread
{
    /** An Instnace of ServerData. */
    final ServerData pollServersServerData;

    /** Slot container for the server list */
    final GuiSlotServer serverSlotContainer;

    ThreadPollServers(GuiSlotServer par1GuiSlotServer, ServerData par2ServerData)
    {
        this.serverSlotContainer = par1GuiSlotServer;
        this.pollServersServerData = par2ServerData;
    }

    public void run()
    {
        boolean flag = false;
        label183:
        {
            label184:
            {
                label185:
                {
                    label186:
                    {
                        label187:
                        {
                            try
                            {
                                flag = true;
                                this.pollServersServerData.serverMOTD = EnumChatFormatting.DARK_GRAY + "Polling..";
                                long i = System.nanoTime();
                                GuiMultiplayer.func_82291_a(this.pollServersServerData);
                                long j = System.nanoTime();
                                this.pollServersServerData.pingToServer = (j - i) / 1000000L;
                                flag = false;
                                break label183;
                            }
                            catch (UnknownHostException unknownhostexception)
                            {
                                this.pollServersServerData.pingToServer = -1L;
                                this.pollServersServerData.serverMOTD = EnumChatFormatting.DARK_RED + "Can\'t resolve hostname";
                                flag = false;
                            }
                            catch (SocketTimeoutException sockettimeoutexception)
                            {
                                this.pollServersServerData.pingToServer = -1L;
                                this.pollServersServerData.serverMOTD = EnumChatFormatting.DARK_RED + "Can\'t reach server";
                                flag = false;
                                break label187;
                            }
                            catch (ConnectException connectexception)
                            {
                                this.pollServersServerData.pingToServer = -1L;
                                this.pollServersServerData.serverMOTD = EnumChatFormatting.DARK_RED + "Can\'t reach server";
                                flag = false;
                                break label186;
                            }
                            catch (IOException ioexception)
                            {
                                this.pollServersServerData.pingToServer = -1L;
                                this.pollServersServerData.serverMOTD = EnumChatFormatting.DARK_RED + "Communication error";
                                flag = false;
                                break label185;
                            }
                            catch (Exception exception)
                            {
                                this.pollServersServerData.pingToServer = -1L;
                                this.pollServersServerData.serverMOTD = "ERROR: " + exception.getClass();
                                flag = false;
                                break label184;
                            }
                            finally
                            {
                                if (flag)
                                {
                                    synchronized (GuiMultiplayer.getLock())
                                    {
                                        GuiMultiplayer.decreaseThreadsPending();
                                    }
                                }
                            }

                            synchronized (GuiMultiplayer.getLock())
                            {
                                GuiMultiplayer.decreaseThreadsPending();
                                return;
                            }
                        }

                        synchronized (GuiMultiplayer.getLock())
                        {
                            GuiMultiplayer.decreaseThreadsPending();
                            return;
                        }
                    }

                    synchronized (GuiMultiplayer.getLock())
                    {
                        GuiMultiplayer.decreaseThreadsPending();
                        return;
                    }
                }

                synchronized (GuiMultiplayer.getLock())
                {
                    GuiMultiplayer.decreaseThreadsPending();
                    return;
                }
            }

            synchronized (GuiMultiplayer.getLock())
            {
                GuiMultiplayer.decreaseThreadsPending();
                return;
            }
        }

        synchronized (GuiMultiplayer.getLock())
        {
            GuiMultiplayer.decreaseThreadsPending();
        }
    }
}
