fix(multiplayer): show friendly message when cato file not found.
This commit is contained in:
@@ -87,14 +87,14 @@ public final class MultiplayerManager {
|
||||
throw new IncompatibleCatoVersionException(version, CATO_VERSION);
|
||||
}
|
||||
|
||||
Path exe = getCatoExecutable();
|
||||
if (!Files.isRegularFile(exe)) {
|
||||
throw new IllegalStateException("Cato file not found");
|
||||
}
|
||||
|
||||
LOG.info(String.format("Joining session (token=%s,version=%s,sessionName=%s,peer=%s,mode=%s,remotePort=%d,localPort=%d)", token, version, sessionName, peer, mode, remotePort, localPort));
|
||||
|
||||
return CompletableFuture.completedFuture(null).thenComposeAsync(unused -> {
|
||||
Path exe = getCatoExecutable();
|
||||
if (!Files.isRegularFile(exe)) {
|
||||
throw new CatoNotExistsException(exe);
|
||||
}
|
||||
|
||||
if (!isPortAvailable(3478)) {
|
||||
throw new CatoAlreadyStartedException();
|
||||
}
|
||||
@@ -478,4 +478,16 @@ public final class MultiplayerManager {
|
||||
|
||||
public static class ConnectionErrorException extends RuntimeException {
|
||||
}
|
||||
|
||||
public static class CatoNotExistsException extends RuntimeException {
|
||||
private final Path file;
|
||||
|
||||
public CatoNotExistsException(Path file) {
|
||||
this.file = file;
|
||||
}
|
||||
|
||||
public Path getFile() {
|
||||
return file;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -213,6 +213,7 @@ public class MultiplayerPage extends DecoratorAnimatedPage implements DecoratorP
|
||||
|
||||
Controllers.dialog(new CreateMultiplayerRoomDialog((result, resolve, reject) -> {
|
||||
int gamePort = result.getServer().getAd();
|
||||
boolean isStaticToken = StringUtils.isNotBlank(globalConfig().getMultiplayerToken());
|
||||
try {
|
||||
MultiplayerManager.CatoSession session = MultiplayerManager.createSession(globalConfig().getMultiplayerToken(), result.getServer().getMotd(), gamePort, result.isAllowAllJoinRequests());
|
||||
session.getServer().setOnClientAdding((client, resolveClient, rejectClient) -> {
|
||||
@@ -238,13 +239,17 @@ public class MultiplayerPage extends DecoratorAnimatedPage implements DecoratorP
|
||||
LOG.log(Level.WARNING, "Cato already started", e);
|
||||
reject.accept(i18n("multiplayer.session.error.already_started"));
|
||||
return;
|
||||
} catch (FileNotFoundException e) {
|
||||
LOG.log(Level.WARNING, "Cato not found", e);
|
||||
} catch (MultiplayerManager.CatoNotExistsException e) {
|
||||
LOG.log(Level.WARNING, "Cato not found " + e.getFile(), e);
|
||||
reject.accept(i18n("multiplayer.session.error.file_not_found"));
|
||||
return;
|
||||
} catch (Exception e) {
|
||||
LOG.log(Level.WARNING, "Failed to create session", e);
|
||||
reject.accept(i18n("multiplayer.session.create.error") + e.getLocalizedMessage());
|
||||
if (isStaticToken) {
|
||||
reject.accept(i18n("multiplayer.session.create.error.static_token") + e.getLocalizedMessage());
|
||||
} else {
|
||||
reject.accept(i18n("multiplayer.session.create.error.dynamic_token") + e.getLocalizedMessage());
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -333,8 +338,8 @@ public class MultiplayerPage extends DecoratorAnimatedPage implements DecoratorP
|
||||
LOG.info("Cato already started");
|
||||
reject.accept(i18n("multiplayer.session.error.already_started"));
|
||||
return null;
|
||||
} else if (resolved instanceof FileNotFoundException) {
|
||||
LOG.log(Level.WARNING, "Cato not found", resolved);
|
||||
} else if (throwable instanceof MultiplayerManager.CatoNotExistsException) {
|
||||
LOG.log(Level.WARNING, "Cato not found " + ((MultiplayerManager.CatoNotExistsException) throwable).getFile(), throwable);
|
||||
reject.accept(i18n("multiplayer.session.error.file_not_found"));
|
||||
return null;
|
||||
} else if (resolved instanceof MultiplayerManager.JoinRequestTimeoutException) {
|
||||
|
||||
@@ -651,7 +651,8 @@ multiplayer.session.close=Close Room
|
||||
multiplayer.session.close.warning=After closing room, all players joined the room will lost connection. Continue?
|
||||
multiplayer.session.copy_room_code=Copy Invitation Code
|
||||
multiplayer.session.create=Create Session
|
||||
multiplayer.session.create.error=Failed to create multiplayer session.
|
||||
multiplayer.session.create.error.dynamic_token=Failed to create multiplayer session. Please try again later.
|
||||
multiplayer.session.create.error.static_token=Failed to create multiplayer session. You can try again with dynamic token.
|
||||
multiplayer.session.create.hint=Before creating multiplayer session, you must click "Open LAN Server" in running game, and type the port displayed in game in the blank below.
|
||||
multiplayer.session.create.join=Connection request
|
||||
multiplayer.session.create.join.allow=Accepts all join requests (When disabled, you need to accept join requests manually, so you can prevent from attacks.)
|
||||
@@ -666,7 +667,7 @@ multiplayer.session.create.token=Token
|
||||
multiplayer.session.create.token.apply=Apply for static token
|
||||
multiplayer.session.create.token.prompt=Default randomized. You can apply for your own token at noin.cn (Chinese website).
|
||||
multiplayer.session.error.already_started=Cato service has already started locally. Please check whether there are other multiplayer services served or not. Or you can kill cato process in task manager.
|
||||
multiplayer.session.error.file_not_found=Cannot found cato. Please check if anti-virus software blocked our functionality.
|
||||
multiplayer.session.error.file_not_found=Cannot find cato executable. This file should be downloaded when entering this page. Please check if your anti-virus software has isolated the file. If true, please rollback.
|
||||
multiplayer.session.expired=Multiplayer session has expired. You should re-create or re-join a room to continue.
|
||||
multiplayer.session.hint=You must click "Open LAN Server" in game in order to enable multiplayer functionality.
|
||||
multiplayer.session.join=Join Session
|
||||
|
||||
@@ -651,7 +651,8 @@ multiplayer.session.close=關閉房間
|
||||
multiplayer.session.close.warning=關閉房間後,已經加入聯機房間的玩家將會斷開連接,是否繼續?
|
||||
multiplayer.session.copy_room_code=複製邀請碼
|
||||
multiplayer.session.create=創建房間
|
||||
multiplayer.session.create.error=創建聯機房間失敗。
|
||||
multiplayer.session.create.error.dynamic_token=創建聯機房間失敗,請稍後再試。
|
||||
multiplayer.session.create.error.static_token=創建聯機房間失敗,你可以使用動態 Token 再試。
|
||||
multiplayer.session.create.hint=創建聯機房間前,你需要先在正在運行的遊戲內的遊戲菜單中選擇 對區域網路開放 選項,然後在下方的輸入框中輸入遊戲內提示的埠號(通常是 5 位的數字)
|
||||
multiplayer.session.create.join=連接申請
|
||||
multiplayer.session.create.join.allow=自動接受所有連接申請(不啟用此選項時,你需要手動同意申請,以避免不相關人士誤連你的伺服器)
|
||||
@@ -666,7 +667,7 @@ multiplayer.session.create.token=Token
|
||||
multiplayer.session.create.token.apply=申請靜態 Token
|
||||
multiplayer.session.create.token.prompt=預設為臨時 Token。你可以在 noin.cn 上申請靜態 Token 並填寫至此處
|
||||
multiplayer.session.error.already_started=本地已經開啟 cato 服務,請檢查是否有其他 HMCL 正在運行聯機服務。或者你可以在任務管理器裡殺掉 cato 進程以繼續。
|
||||
multiplayer.session.error.file_not_found=找不到 cato。請檢查防毒軟體是否攔截了 HMCL 的多人聯機服務(cato),如果被攔截,請取消攔截後重啟 HMCL。
|
||||
multiplayer.session.error.file_not_found=找不到 cato 程序。該程序應該在進入多人聯機頁面時完成下載。請檢查你電腦的防毒軟體是否將 cato 標記為病毒,如果是,請恢復 cato。
|
||||
multiplayer.session.expired=聯機會話連續使用時間超過了 3 小時,你需要重新創建/加入房間以繼續聯機。
|
||||
multiplayer.session.join=加入房間
|
||||
multiplayer.session.join.error=加入房間失敗
|
||||
|
||||
@@ -652,7 +652,8 @@ multiplayer.session.close=关闭房间
|
||||
multiplayer.session.close.warning=关闭房间后,已经加入联机房间的玩家将会断开连接,是否继续?
|
||||
multiplayer.session.copy_room_code=复制邀请码
|
||||
multiplayer.session.create=创建房间
|
||||
multiplayer.session.create.error=创建联机房间失败。
|
||||
multiplayer.session.create.error.dynamic_token=创建联机房间失败,请稍后再试。
|
||||
multiplayer.session.create.error.static_token=创建联机房间失败,你可以使用动态 Token 再试。
|
||||
multiplayer.session.create.hint=创建联机房间前,你需要先在正在运行的游戏内的游戏菜单中选择 对局域网开放 选项,然后在下方的输入框中确认游戏内提示的端口号(通常是 5 位的数字)
|
||||
multiplayer.session.create.join=连接申请
|
||||
multiplayer.session.create.join.allow=自动接受所有连接申请(不启用此选项时,你需要手动同意申请,以避免不相关人士误连你的服务器)
|
||||
@@ -667,7 +668,7 @@ multiplayer.session.create.token=Token
|
||||
multiplayer.session.create.token.apply=申请静态 Token
|
||||
multiplayer.session.create.token.prompt=默认为临时 Token。你可以在 noin.cn 上申请静态 Token 并填写至此处
|
||||
multiplayer.session.error.already_started=本地已经开启 cato 服务,请检查是否有其他 HMCL 正在运行联机服务。或者你可以在任务管理器里杀掉 cato 进程以继续。
|
||||
multiplayer.session.error.file_not_found=找不到 cato。请检查杀毒软件是否拦截了 HMCL 的多人联机服务(cato),如果被拦截,请取消拦截后重启 HMCL。
|
||||
multiplayer.session.error.file_not_found=找不到 cato 程序。该程序应该在进入多人联机页面时完成下载。请检查你电脑的杀毒软件是否将 cato 标记为病毒,如果是,请恢复 cato。
|
||||
multiplayer.session.expired=联机会话连续使用时间超过了 3 小时,你需要重新创建/加入房间以继续联机。
|
||||
multiplayer.session.join=加入房间
|
||||
multiplayer.session.join.error=加入房间失败。如果你或对方的网络类型是差(对称型),可能无法使用联机功能。
|
||||
|
||||
Reference in New Issue
Block a user