minecraft-src/com/mojang/realmsclient/client/Ping.java
2025-07-04 01:41:11 +03:00

81 lines
2.2 KiB
Java

package com.mojang.realmsclient.client;
import com.google.common.collect.Lists;
import com.mojang.realmsclient.dto.RegionPingResult;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.util.Comparator;
import java.util.List;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.Util;
import org.apache.commons.io.IOUtils;
@Environment(EnvType.CLIENT)
public class Ping {
public static List<RegionPingResult> ping(Ping.Region... regions) {
for (Ping.Region region : regions) {
ping(region.endpoint);
}
List<RegionPingResult> list = Lists.<RegionPingResult>newArrayList();
for (Ping.Region region2 : regions) {
list.add(new RegionPingResult(region2.name, ping(region2.endpoint)));
}
list.sort(Comparator.comparingInt(RegionPingResult::ping));
return list;
}
private static int ping(String hostname) {
int i = 700;
long l = 0L;
Socket socket = null;
for (int j = 0; j < 5; j++) {
try {
SocketAddress socketAddress = new InetSocketAddress(hostname, 80);
socket = new Socket();
long m = now();
socket.connect(socketAddress, 700);
l += now() - m;
} catch (Exception var12) {
l += 700L;
} finally {
IOUtils.closeQuietly(socket);
}
}
return (int)(l / 5.0);
}
private static long now() {
return Util.getMillis();
}
public static List<RegionPingResult> pingAllRegions() {
return ping(Ping.Region.values());
}
@Environment(EnvType.CLIENT)
static enum Region {
US_EAST_1("us-east-1", "ec2.us-east-1.amazonaws.com"),
US_WEST_2("us-west-2", "ec2.us-west-2.amazonaws.com"),
US_WEST_1("us-west-1", "ec2.us-west-1.amazonaws.com"),
EU_WEST_1("eu-west-1", "ec2.eu-west-1.amazonaws.com"),
AP_SOUTHEAST_1("ap-southeast-1", "ec2.ap-southeast-1.amazonaws.com"),
AP_SOUTHEAST_2("ap-southeast-2", "ec2.ap-southeast-2.amazonaws.com"),
AP_NORTHEAST_1("ap-northeast-1", "ec2.ap-northeast-1.amazonaws.com"),
SA_EAST_1("sa-east-1", "ec2.sa-east-1.amazonaws.com");
final String name;
final String endpoint;
private Region(final String name, final String endpoint) {
this.name = name;
this.endpoint = endpoint;
}
}
}