RealmsWorldUpload.java
com.mojang.realmsclient.client.worldupload.RealmsWorldUpload
信息
- 全限定名:com.mojang.realmsclient.client.worldupload.RealmsWorldUpload
- 类型:public class
- 包:com.mojang.realmsclient.client.worldupload
- 源码路径:src/main/java/com/mojang/realmsclient/client/worldupload/RealmsWorldUpload.java
- 起始行号:L26
- 职责:
TODO
字段/常量
-
LOGGER- 类型:
Logger - 修饰符:
private static final - 源码定位:
L27 - 说明:
TODO
- 类型:
-
UPLOAD_RETRIES- 类型:
int - 修饰符:
public static final - 源码定位:
L28 - 说明:
TODO
- 类型:
-
client- 类型:
RealmsClient - 修饰符:
private final - 源码定位:
L29 - 说明:
TODO
- 类型:
-
worldFolder- 类型:
Path - 修饰符:
private final - 源码定位:
L30 - 说明:
TODO
- 类型:
-
realmsSlot- 类型:
RealmsSlot - 修饰符:
private final - 源码定位:
L31 - 说明:
TODO
- 类型:
-
user- 类型:
User - 修饰符:
private final - 源码定位:
L32 - 说明:
TODO
- 类型:
-
realmId- 类型:
long - 修饰符:
private final - 源码定位:
L33 - 说明:
TODO
- 类型:
-
statusCallback- 类型:
RealmsWorldUploadStatusTracker - 修饰符:
private final - 源码定位:
L34 - 说明:
TODO
- 类型:
-
cancelled- 类型:
boolean - 修饰符:
private volatile - 源码定位:
L35 - 说明:
TODO
- 类型:
-
uploadTask- 类型:
CompletableFuture<?> - 修饰符:
private volatile - 源码定位:
L36 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public RealmsWorldUpload(Path worldFolder, RealmsSlot realmsSlot, User user, long realmId, RealmsWorldUploadStatusTracker statusCallback) @ L38
- 构造器名:RealmsWorldUpload
- 源码定位:L38
- 修饰符:public
参数:
- worldFolder: Path
- realmsSlot: RealmsSlot
- user: User
- realmId: long
- statusCallback: RealmsWorldUploadStatusTracker
说明:
TODO
方法
下面的方法块按源码顺序生成。
public CompletableFuture<?> packAndUpload() @ L46
- 方法名:packAndUpload
- 源码定位:L46
- 返回类型:CompletableFuture<?>
- 修饰符:public
参数:
- 无
说明:
TODO
public void cancel() @ L111
- 方法名:cancel
- 源码定位:L111
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
private UploadInfo requestUploadInfoWithRetries() @ L119
- 方法名:requestUploadInfoWithRetries
- 源码定位:L119
- 返回类型:UploadInfo
- 修饰符:private
参数:
- 无
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class RealmsWorldUpload {
private static final Logger LOGGER = LogUtils.getLogger();
public static final int UPLOAD_RETRIES = 20;
private final RealmsClient client = RealmsClient.getOrCreate();
private final Path worldFolder;
private final RealmsSlot realmsSlot;
private final User user;
private final long realmId;
private final RealmsWorldUploadStatusTracker statusCallback;
private volatile boolean cancelled;
private volatile @Nullable CompletableFuture<?> uploadTask;
public RealmsWorldUpload(Path worldFolder, RealmsSlot realmsSlot, User user, long realmId, RealmsWorldUploadStatusTracker statusCallback) {
this.worldFolder = worldFolder;
this.realmsSlot = realmsSlot;
this.user = user;
this.realmId = realmId;
this.statusCallback = statusCallback;
}
public CompletableFuture<?> packAndUpload() {
return CompletableFuture.runAsync(
() -> {
File archive = null;
try {
UploadInfo uploadInfo = this.requestUploadInfoWithRetries();
archive = RealmsUploadWorldPacker.pack(this.worldFolder, () -> this.cancelled);
this.statusCallback.setUploading();
try (FileUpload fileUpload = new FileUpload(
archive,
this.realmId,
this.realmsSlot.slotId,
uploadInfo,
this.user,
SharedConstants.getCurrentVersion().name(),
this.realmsSlot.options.version,
this.statusCallback.getUploadStatus()
)) {
CompletableFuture<UploadResult> uploadTask = fileUpload.startUpload();
this.uploadTask = uploadTask;
if (!this.cancelled) {
UploadResult join;
try {
join = uploadTask.join();
} catch (CompletionException var17) {
throw var17.getCause();
}
String errorMessage = join.getSimplifiedErrorMessage();
if (errorMessage != null) {
throw new RealmsUploadFailedException(errorMessage);
}
UploadTokenCache.invalidate(this.realmId);
this.client.updateSlot(this.realmId, this.realmsSlot.slotId, this.realmsSlot.options, this.realmsSlot.settings);
return;
}
uploadTask.cancel(true);
}
} catch (RealmsServiceException var19) {
throw new RealmsUploadFailedException(var19.realmsError.errorMessage());
} catch (CancellationException | InterruptedException var20) {
throw new RealmsUploadCanceledException();
} catch (RealmsUploadException var21) {
throw var21;
} catch (Throwable var22) {
if (var22 instanceof Error error) {
throw error;
}
throw new RealmsUploadFailedException(var22.getMessage());
} finally {
if (archive != null) {
LOGGER.debug("Deleting file {}", archive.getAbsolutePath());
archive.delete();
}
}
},
Util.backgroundExecutor()
);
}
public void cancel() {
this.cancelled = true;
CompletableFuture<?> uploadTask = this.uploadTask;
if (uploadTask != null) {
uploadTask.cancel(true);
}
}
private UploadInfo requestUploadInfoWithRetries() throws RealmsServiceException, InterruptedException {
for (int i = 0; i < 20; i++) {
try {
UploadInfo uploadInfo = this.client.requestUploadInfo(this.realmId);
if (this.cancelled) {
throw new RealmsUploadCanceledException();
}
if (uploadInfo != null) {
if (!uploadInfo.worldClosed()) {
throw new RealmsUploadWorldNotClosedException();
}
return uploadInfo;
}
} catch (RetryCallException var3) {
Thread.sleep(var3.delaySeconds * 1000L);
}
}
throw new RealmsUploadWorldNotClosedException();
}
}引用的其他类
-
- 引用位置:
构造调用 - 关联成员:
FileUpload()
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
RealmsClient.getOrCreate()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
RealmsUploadCanceledException()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
RealmsUploadFailedException()
- 引用位置:
-
RealmsUploadWorldNotClosedException
- 引用位置:
构造调用 - 关联成员:
RealmsUploadWorldNotClosedException()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
RealmsUploadWorldPacker.pack()
- 引用位置:
-
RealmsWorldUploadStatusTracker
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
UploadTokenCache.invalidate()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
SharedConstants.getCurrentVersion()
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Util.backgroundExecutor()
- 引用位置: