LanServerDetection.java
net.minecraft.client.server.LanServerDetection
信息
- 全限定名:net.minecraft.client.server.LanServerDetection
- 类型:public class
- 包:net.minecraft.client.server
- 源码路径:src/main/java/net/minecraft/client/server/LanServerDetection.java
- 起始行号:L20
- 职责:
TODO
字段/常量
-
UNIQUE_THREAD_ID- 类型:
AtomicInteger - 修饰符:
private static final - 源码定位:
L21 - 说明:
TODO
- 类型:
-
LOGGER- 类型:
Logger - 修饰符:
private static final - 源码定位:
L22 - 说明:
TODO
- 类型:
内部类/嵌套类型
-
net.minecraft.client.server.LanServerDetection.LanServerDetector- 类型:
class - 修饰符:
public static - 源码定位:
L25 - 说明:
TODO
- 类型:
-
net.minecraft.client.server.LanServerDetection.LanServerList- 类型:
class - 修饰符:
public static - 源码定位:
L72 - 说明:
TODO
- 类型:
构造器
- 无
方法
下面的方法块按源码顺序生成。
- 无
代码
@OnlyIn(Dist.CLIENT)
public class LanServerDetection {
private static final AtomicInteger UNIQUE_THREAD_ID = new AtomicInteger(0);
private static final Logger LOGGER = LogUtils.getLogger();
@OnlyIn(Dist.CLIENT)
public static class LanServerDetector extends Thread {
private final LanServerDetection.LanServerList serverList;
private final InetAddress pingGroup;
private final MulticastSocket socket;
public LanServerDetector(LanServerDetection.LanServerList serverList) throws IOException {
super("LanServerDetector #" + LanServerDetection.UNIQUE_THREAD_ID.incrementAndGet());
this.serverList = serverList;
this.setDaemon(true);
this.setUncaughtExceptionHandler(new DefaultUncaughtExceptionHandler(LanServerDetection.LOGGER));
this.socket = new MulticastSocket(4445);
this.pingGroup = InetAddress.getByName("224.0.2.60");
this.socket.setSoTimeout(5000);
this.socket.joinGroup(this.pingGroup);
}
@Override
public void run() {
byte[] buf = new byte[1024];
while (!this.isInterrupted()) {
DatagramPacket packet = new DatagramPacket(buf, buf.length);
try {
this.socket.receive(packet);
} catch (SocketTimeoutException var5) {
continue;
} catch (IOException var6) {
LanServerDetection.LOGGER.error("Couldn't ping server", (Throwable)var6);
break;
}
String received = new String(packet.getData(), packet.getOffset(), packet.getLength(), StandardCharsets.UTF_8);
LanServerDetection.LOGGER.debug("{}: {}", packet.getAddress(), received);
this.serverList.addServer(received, packet.getAddress());
}
try {
this.socket.leaveGroup(this.pingGroup);
} catch (IOException var4) {
}
this.socket.close();
}
}
@OnlyIn(Dist.CLIENT)
public static class LanServerList {
private final List<LanServer> servers = Lists.newArrayList();
private boolean isDirty;
public synchronized @Nullable List<LanServer> takeDirtyServers() {
if (this.isDirty) {
List<LanServer> newServers = List.copyOf(this.servers);
this.isDirty = false;
return newServers;
} else {
return null;
}
}
public synchronized void addServer(String pingData, InetAddress socketAddress) {
String motd = LanServerPinger.parseMotd(pingData);
String address = LanServerPinger.parseAddress(pingData);
if (address != null) {
address = socketAddress.getHostAddress() + ":" + address;
boolean found = false;
for (LanServer server : this.servers) {
if (server.getAddress().equals(address)) {
server.updatePingTime();
found = true;
break;
}
}
if (!found) {
this.servers.add(new LanServer(motd, address));
this.isDirty = true;
}
}
}
}
}引用的其他类
-
DefaultUncaughtExceptionHandler
- 引用位置:
构造调用 - 关联成员:
DefaultUncaughtExceptionHandler()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
LanServer()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
LanServerPinger.parseAddress(), LanServerPinger.parseMotd()
- 引用位置: