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    }