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 }