ClientTelemetryManager.java
net.minecraft.client.telemetry.ClientTelemetryManager
信息
- 全限定名:net.minecraft.client.telemetry.ClientTelemetryManager
- 类型:public class
- 包:net.minecraft.client.telemetry
- 源码路径:src/main/java/net/minecraft/client/telemetry/ClientTelemetryManager.java
- 起始行号:L25
- 实现:AutoCloseable
- 职责:
TODO
字段/常量
-
THREAD_COUNT- 类型:
AtomicInteger - 修饰符:
private static final - 源码定位:
L26 - 说明:
TODO
- 类型:
-
EXECUTOR- 类型:
Executor - 修饰符:
private static final - 源码定位:
L27 - 说明:
TODO
- 类型:
-
minecraft- 类型:
Minecraft - 修饰符:
private final - 源码定位:
L32 - 说明:
TODO
- 类型:
-
userApiService- 类型:
UserApiService - 修饰符:
private final - 源码定位:
L33 - 说明:
TODO
- 类型:
-
deviceSessionProperties- 类型:
TelemetryPropertyMap - 修饰符:
private final - 源码定位:
L34 - 说明:
TODO
- 类型:
-
logDirectory- 类型:
Path - 修饰符:
private final - 源码定位:
L35 - 说明:
TODO
- 类型:
-
logManager- 类型:
CompletableFuture<Optional<TelemetryLogManager>> - 修饰符:
private final - 源码定位:
L36 - 说明:
TODO
- 类型:
-
outsideSessionSender- 类型:
Supplier<TelemetryEventSender> - 修饰符:
private final - 源码定位:
L37 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public ClientTelemetryManager(Minecraft minecraft, UserApiService userApiService, User user) @ L39
- 构造器名:ClientTelemetryManager
- 源码定位:L39
- 修饰符:public
参数:
- minecraft: Minecraft
- userApiService: UserApiService
- user: User
说明:
TODO
方法
下面的方法块按源码顺序生成。
public WorldSessionTelemetryManager createWorldSessionManager(boolean newWorld, Duration worldLoadDuration, String minigameName) @ L56
- 方法名:createWorldSessionManager
- 源码定位:L56
- 返回类型:WorldSessionTelemetryManager
- 修饰符:public
参数:
- newWorld: boolean
- worldLoadDuration: Duration
- minigameName: String
说明:
TODO
public TelemetryEventSender getOutsideSessionSender() @ L60
- 方法名:getOutsideSessionSender
- 源码定位:L60
- 返回类型:TelemetryEventSender
- 修饰符:public
参数:
- 无
说明:
TODO
private TelemetryEventSender createEventSender() @ L64
- 方法名:createEventSender
- 源码定位:L64
- 返回类型:TelemetryEventSender
- 修饰符:private
参数:
- 无
说明:
TODO
public Path getLogDirectory() @ L96
- 方法名:getLogDirectory
- 源码定位:L96
- 返回类型:Path
- 修饰符:public
参数:
- 无
说明:
TODO
public void close() @ L100
- 方法名:close
- 源码定位:L100
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class ClientTelemetryManager implements AutoCloseable {
private static final AtomicInteger THREAD_COUNT = new AtomicInteger(1);
private static final Executor EXECUTOR = Executors.newSingleThreadExecutor(r -> {
Thread result = new Thread(r);
result.setName("Telemetry-Sender-#" + THREAD_COUNT.getAndIncrement());
return result;
});
private final Minecraft minecraft;
private final UserApiService userApiService;
private final TelemetryPropertyMap deviceSessionProperties;
private final Path logDirectory;
private final CompletableFuture<Optional<TelemetryLogManager>> logManager;
private final Supplier<TelemetryEventSender> outsideSessionSender = Suppliers.memoize(this::createEventSender);
public ClientTelemetryManager(Minecraft minecraft, UserApiService userApiService, User user) {
this.minecraft = minecraft;
this.userApiService = userApiService;
TelemetryPropertyMap.Builder properties = TelemetryPropertyMap.builder();
user.getXuid().ifPresent(id -> properties.put(TelemetryProperty.USER_ID, id));
user.getClientId().ifPresent(id -> properties.put(TelemetryProperty.CLIENT_ID, id));
properties.put(TelemetryProperty.MINECRAFT_SESSION_ID, UUID.randomUUID());
properties.put(TelemetryProperty.GAME_VERSION, SharedConstants.getCurrentVersion().id());
properties.put(TelemetryProperty.OPERATING_SYSTEM, Util.getPlatform().telemetryName());
properties.put(TelemetryProperty.PLATFORM, System.getProperty("os.name"));
properties.put(TelemetryProperty.CLIENT_MODDED, Minecraft.checkModStatus().shouldReportAsModified());
properties.putIfNotNull(TelemetryProperty.LAUNCHER_NAME, Minecraft.getLauncherBrand());
this.deviceSessionProperties = properties.build();
this.logDirectory = minecraft.gameDirectory.toPath().resolve("logs/telemetry");
this.logManager = TelemetryLogManager.open(this.logDirectory);
}
public WorldSessionTelemetryManager createWorldSessionManager(boolean newWorld, @Nullable Duration worldLoadDuration, @Nullable String minigameName) {
return new WorldSessionTelemetryManager(this.createEventSender(), newWorld, worldLoadDuration, minigameName);
}
public TelemetryEventSender getOutsideSessionSender() {
return this.outsideSessionSender.get();
}
private TelemetryEventSender createEventSender() {
if (!this.minecraft.allowsTelemetry()) {
return TelemetryEventSender.DISABLED;
} else {
TelemetrySession telemetrySession = this.userApiService.newTelemetrySession(EXECUTOR);
if (!telemetrySession.isEnabled()) {
return TelemetryEventSender.DISABLED;
} else {
CompletableFuture<Optional<TelemetryEventLogger>> loggerFuture = this.logManager
.thenCompose(manager -> manager.map(TelemetryLogManager::openLogger).orElseGet(() -> CompletableFuture.completedFuture(Optional.empty())));
return (type, buildFunction) -> {
if (!type.isOptIn() || Minecraft.getInstance().telemetryOptInExtra()) {
TelemetryPropertyMap.Builder properties = TelemetryPropertyMap.builder();
properties.putAll(this.deviceSessionProperties);
properties.put(TelemetryProperty.EVENT_TIMESTAMP_UTC, Instant.now());
properties.put(TelemetryProperty.OPT_IN, type.isOptIn());
buildFunction.accept(properties);
TelemetryEventInstance event = new TelemetryEventInstance(type, properties.build());
loggerFuture.thenAccept(logger -> {
if (!logger.isEmpty()) {
logger.get().log(event);
if (!SharedConstants.IS_RUNNING_IN_IDE || !SharedConstants.DEBUG_DONT_SEND_TELEMETRY_TO_BACKEND) {
event.export(telemetrySession).send();
}
}
});
}
};
}
}
}
public Path getLogDirectory() {
return this.logDirectory;
}
@Override
public void close() {
this.logManager.thenAccept(manager -> manager.ifPresent(TelemetryLogManager::close));
}
}引用的其他类
-
- 引用位置:
方法调用 - 关联成员:
SharedConstants.getCurrentVersion()
- 引用位置:
-
- 引用位置:
参数/字段/方法调用 - 关联成员:
Minecraft.checkModStatus(), Minecraft.getInstance(), Minecraft.getLauncherBrand()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
System.getProperty()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
TelemetryEventInstance()
- 引用位置:
-
- 引用位置:
字段/返回值
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
TelemetryLogManager.open()
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
TelemetryPropertyMap.builder()
- 引用位置:
-
- 引用位置:
构造调用/返回值 - 关联成员:
WorldSessionTelemetryManager()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Util.getPlatform()
- 引用位置: