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 }