Ping.java

com.mojang.realmsclient.client.Ping

信息

  • 全限定名:com.mojang.realmsclient.client.Ping
  • 类型:public class
  • 包:com.mojang.realmsclient.client
  • 源码路径:src/main/java/com/mojang/realmsclient/client/Ping.java
  • 起始行号:L16
  • 职责:

    TODO

字段/常量

内部类/嵌套类型

  • com.mojang.realmsclient.client.Ping.Region
    • 类型: enum
    • 修饰符: static
    • 源码定位: L63
    • 说明:

      TODO

构造器

方法

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

public static List<RegionPingResult> ping(Ping.Region... regions) @ L17

  • 方法名:ping
  • 源码定位:L17
  • 返回类型:List
  • 修饰符:public static

参数:

  • regions: Ping.Region…

说明:

TODO

private static int ping(String host) @ L32

  • 方法名:ping
  • 源码定位:L32
  • 返回类型:int
  • 修饰符:private static

参数:

  • host: String

说明:

TODO

private static long now() @ L54

  • 方法名:now
  • 源码定位:L54
  • 返回类型:long
  • 修饰符:private static

参数:

说明:

TODO

public static List<RegionPingResult> pingAllRegions() @ L58

  • 方法名:pingAllRegions
  • 源码定位:L58
  • 返回类型:List
  • 修饰符:public static

参数:

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class Ping {
    public static List<RegionPingResult> ping(Ping.Region... regions) {
        for (Ping.Region region : regions) {
            ping(region.endpoint);
        }
 
        List<RegionPingResult> results = Lists.newArrayList();
 
        for (Ping.Region region : regions) {
            results.add(new RegionPingResult(region.name, ping(region.endpoint)));
        }
 
        results.sort(Comparator.comparingInt(RegionPingResult::ping));
        return results;
    }
 
    private static int ping(String host) {
        int timeout = 700;
        long sum = 0L;
        Socket socket = null;
 
        for (int i = 0; i < 5; i++) {
            try {
                SocketAddress sockAddr = new InetSocketAddress(host, 80);
                socket = new Socket();
                long t1 = now();
                socket.connect(sockAddr, 700);
                sum += now() - t1;
            } catch (Exception var12) {
                sum += 700L;
            } finally {
                IOUtils.closeQuietly(socket);
            }
        }
 
        return (int)(sum / 5.0);
    }
 
    private static long now() {
        return Util.getMillis();
    }
 
    public static List<RegionPingResult> pingAllRegions() {
        return ping(Ping.Region.values());
    }
 
    @OnlyIn(Dist.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");
 
        private final String name;
        private final String endpoint;
 
        private Region(String name, String endpoint) {
            this.name = name;
            this.endpoint = endpoint;
        }
    }
}

引用的其他类

  • RegionPingResult

    • 引用位置: 构造调用/返回值
    • 关联成员: RegionPingResult()
  • Util

    • 引用位置: 方法调用
    • 关联成员: Util.getMillis()