    001    package net.minecraft.client.multiplayer;
    002
    003    import cpw.mods.fml.relauncher.Side;
    004    import cpw.mods.fml.relauncher.SideOnly;
    005    import java.io.IOException;
    006    import java.net.DatagramPacket;
    007    import java.net.DatagramSocket;
    008    import java.net.InetAddress;
    009    import java.util.logging.Level;
    010    import java.util.logging.Logger;
    011
    012    @SideOnly(Side.CLIENT)
    013    public class ThreadLanServerPing extends Thread
    014    {
    015        private static Logger logger = Logger.getLogger("Minecraft");
    016        private final String motd;
    017
    018        /** The socket we're using to send packets on. */
    019        private final DatagramSocket socket;
    020        private boolean isStopping = true;
    021        private final String address;
    022
    023        public ThreadLanServerPing(String par1Str, String par2Str) throws IOException
    024        {
    025            super("LanServerPinger");
    026            this.motd = par1Str;
    027            this.address = par2Str;
    028            this.setDaemon(true);
    029            this.socket = new DatagramSocket();
    030        }
    031
    032        public void run()
    033        {
    034            String var1 = getPingResponse(this.motd, this.address);
    035            byte[] var2 = var1.getBytes();
    036
    037            while (!this.isInterrupted() && this.isStopping)
    038            {
    039                try
    040                {
    041                    InetAddress var3 = InetAddress.getByName("224.0.2.60");
    042                    DatagramPacket var4 = new DatagramPacket(var2, var2.length, var3, 4445);
    043                    this.socket.send(var4);
    044                }
    045                catch (IOException var6)
    046                {
    047                    logger.log(Level.WARNING, "LanServerPinger: " + var6.getMessage());
    048                    break;
    049                }
    050
    051                try
    052                {
    053                    sleep(1500L);
    054                }
    055                catch (InterruptedException var5)
    056                {
    057                    ;
    058                }
    059            }
    060        }
    061
    062        public void interrupt()
    063        {
    064            super.interrupt();
    065            this.isStopping = false;
    066        }
    067
    068        public static String getPingResponse(String par0Str, String par1Str)
    069        {
    070            return "[MOTD]" + par0Str + "[/MOTD][AD]" + par1Str + "[/AD]";
    071        }
    072
    073        public static String getMotdFromPingResponse(String par0Str)
    074        {
    075            int var1 = par0Str.indexOf("[MOTD]");
    076
    077            if (var1 < 0)
    078            {
    079                return "missing no";
    080            }
    081            else
    082            {
    083                int var2 = par0Str.indexOf("[/MOTD]", var1 + "[MOTD]".length());
    084                return var2 < var1 ? "missing no" : par0Str.substring(var1 + "[MOTD]".length(), var2);
    085            }
    086        }
    087
    088        public static String getAdFromPingResponse(String par0Str)
    089        {
    090            int var1 = par0Str.indexOf("[/MOTD]");
    091
    092            if (var1 < 0)
    093            {
    094                return null;
    095            }
    096            else
    097            {
    098                int var2 = par0Str.indexOf("[/MOTD]", var1 + "[/MOTD]".length());
    099
    100                if (var2 >= 0)
    101                {
    102                    return null;
    103                }
    104                else
    105                {
    106                    int var3 = par0Str.indexOf("[AD]", var1 + "[/MOTD]".length());
    107
    108                    if (var3 < 0)
    109                    {
    110                        return null;
    111                    }
    112                    else
    113                    {
    114                        int var4 = par0Str.indexOf("[/AD]", var3 + "[AD]".length());
    115                        return var4 < var3 ? null : par0Str.substring(var3 + "[AD]".length(), var4);
    116                    }
    117                }
    118            }
    119        }
    120    }