LanServerPinger.java

net.minecraft.client.server.LanServerPinger

信息

  • 全限定名:net.minecraft.client.server.LanServerPinger
  • 类型:public class
  • 包:net.minecraft.client.server
  • 源码路径:src/main/java/net/minecraft/client/server/LanServerPinger.java
  • 起始行号:L17
  • 继承:Thread
  • 职责:

    TODO

字段/常量

  • UNIQUE_THREAD_ID

    • 类型: AtomicInteger
    • 修饰符: private static final
    • 源码定位: L18
    • 说明:

      TODO

  • LOGGER

    • 类型: Logger
    • 修饰符: private static final
    • 源码定位: L19
    • 说明:

      TODO

  • MULTICAST_GROUP

    • 类型: String
    • 修饰符: public static final
    • 源码定位: L20
    • 说明:

      TODO

  • PING_PORT

    • 类型: int
    • 修饰符: public static final
    • 源码定位: L21
    • 说明:

      TODO

  • PING_INTERVAL

    • 类型: long
    • 修饰符: private static final
    • 源码定位: L22
    • 说明:

      TODO

  • motd

    • 类型: String
    • 修饰符: private final
    • 源码定位: L23
    • 说明:

      TODO

  • socket

    • 类型: DatagramSocket
    • 修饰符: private final
    • 源码定位: L24
    • 说明:

      TODO

  • isRunning

    • 类型: boolean
    • 修饰符: private
    • 源码定位: L25
    • 说明:

      TODO

  • serverAddress

    • 类型: String
    • 修饰符: private final
    • 源码定位: L26
    • 说明:

      TODO

内部类/嵌套类型

构造器

public LanServerPinger(String motd, String serverAddress) @ L28

  • 构造器名:LanServerPinger
  • 源码定位:L28
  • 修饰符:public

参数:

  • motd: String
  • serverAddress: String

说明:

TODO

方法

下面的方法块按源码顺序生成。

public void run() @ L37

  • 方法名:run
  • 源码定位:L37
  • 返回类型:void
  • 修饰符:public

参数:

说明:

TODO

public void interrupt() @ L59

  • 方法名:interrupt
  • 源码定位:L59
  • 返回类型:void
  • 修饰符:public

参数:

说明:

TODO

public static String createPingString(String motd, String address) @ L65

  • 方法名:createPingString
  • 源码定位:L65
  • 返回类型:String
  • 修饰符:public static

参数:

  • motd: String
  • address: String

说明:

TODO

public static String parseMotd(String pingString) @ L69

  • 方法名:parseMotd
  • 源码定位:L69
  • 返回类型:String
  • 修饰符:public static

参数:

  • pingString: String

说明:

TODO

public static String parseAddress(String pingString) @ L79

  • 方法名:parseAddress
  • 源码定位:L79
  • 返回类型:String
  • 修饰符:public static

参数:

  • pingString: String

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class LanServerPinger extends Thread {
    private static final AtomicInteger UNIQUE_THREAD_ID = new AtomicInteger(0);
    private static final Logger LOGGER = LogUtils.getLogger();
    public static final String MULTICAST_GROUP = "224.0.2.60";
    public static final int PING_PORT = 4445;
    private static final long PING_INTERVAL = 1500L;
    private final String motd;
    private final DatagramSocket socket;
    private boolean isRunning = true;
    private final String serverAddress;
 
    public LanServerPinger(String motd, String serverAddress) throws IOException {
        super("LanServerPinger #" + UNIQUE_THREAD_ID.incrementAndGet());
        this.motd = motd;
        this.serverAddress = serverAddress;
        this.setDaemon(true);
        this.setUncaughtExceptionHandler(new DefaultUncaughtExceptionHandler(LOGGER));
        this.socket = new DatagramSocket();
    }
 
    @Override
    public void run() {
        String pingString = createPingString(this.motd, this.serverAddress);
        byte[] ping = pingString.getBytes(StandardCharsets.UTF_8);
 
        while (!this.isInterrupted() && this.isRunning) {
            try {
                InetAddress group = InetAddress.getByName("224.0.2.60");
                DatagramPacket packet = new DatagramPacket(ping, ping.length, group, 4445);
                this.socket.send(packet);
            } catch (IOException var6) {
                LOGGER.warn("LanServerPinger: {}", var6.getMessage());
                break;
            }
 
            try {
                sleep(1500L);
            } catch (InterruptedException var5) {
            }
        }
    }
 
    @Override
    public void interrupt() {
        super.interrupt();
        this.isRunning = false;
    }
 
    public static String createPingString(String motd, String address) {
        return "[MOTD]" + motd + "[/MOTD][AD]" + address + "[/AD]";
    }
 
    public static String parseMotd(String pingString) {
        int startIndex = pingString.indexOf("[MOTD]");
        if (startIndex < 0) {
            return "missing no";
        } else {
            int endIndex = pingString.indexOf("[/MOTD]", startIndex + "[MOTD]".length());
            return endIndex < startIndex ? "missing no" : pingString.substring(startIndex + "[MOTD]".length(), endIndex);
        }
    }
 
    public static @Nullable String parseAddress(String pingString) {
        int endMotdIndex = pingString.indexOf("[/MOTD]");
        if (endMotdIndex < 0) {
            return null;
        } else {
            int secondEndMotdIndex = pingString.indexOf("[/MOTD]", endMotdIndex + "[/MOTD]".length());
            if (secondEndMotdIndex >= 0) {
                return null;
            } else {
                int startIndex = pingString.indexOf("[AD]", endMotdIndex + "[/MOTD]".length());
                if (startIndex < 0) {
                    return null;
                } else {
                    int endIndex = pingString.indexOf("[/AD]", startIndex + "[AD]".length());
                    return endIndex < startIndex ? null : pingString.substring(startIndex + "[AD]".length(), endIndex);
                }
            }
        }
    }
}

引用的其他类