Skip to content

Commit 8fb14aa

Browse files
committed
fix bugs, optimize code
1 parent b41dafd commit 8fb14aa

4 files changed

Lines changed: 55 additions & 68 deletions

File tree

build.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ dependencies {
3131
minecraft "com.mojang:minecraft:${project.minecraft_version}"
3232
mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
3333
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
34-
include implementation('org.java-websocket:Java-WebSocket:1.6.0')
3534

3635
// Fabric API. This is technically optional, but you probably want it anyway.
3736
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"

src/main/java/zadudoder/spmhelper/config/SPmHelperConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public String getAPI_TOKEN() {
3636
return API_TOKEN;
3737
}
3838

39-
public void setAPI_TOKEN(String TOKEN) {
39+
public void setToken(String TOKEN) {
4040
this.API_TOKEN = TOKEN;
4141
}
4242

src/main/java/zadudoder/spmhelper/utils/SPmHelperApi.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@
99
import zadudoder.spmhelper.utils.types.Service;
1010

1111
import java.net.URI;
12-
import java.net.URISyntaxException;
1312
import java.net.http.HttpClient;
1413
import java.net.http.HttpRequest;
1514
import java.net.http.HttpResponse;
15+
import java.net.http.WebSocket;
1616
import java.time.Duration;
1717
import java.util.concurrent.CompletableFuture;
1818

@@ -23,22 +23,20 @@ public class SPmHelperApi {
2323
.version(HttpClient.Version.HTTP_2)
2424
.connectTimeout(Duration.ofSeconds(10))
2525
.build();
26+
public static WebSocket webSocket;
2627

2728
public static void startAuthProcess(ClientPlayerEntity player) {
2829
MinecraftClient client = MinecraftClient.getInstance();
2930
String playerUuid = client.player.getUuid().toString().replace("-", "");
3031
JsonObject json = new JsonObject();
3132
json.addProperty("minecraft_uuid", playerUuid);
3233
try {
33-
SocketClient socketClient = new SocketClient(new URI("wss://api.spmhelper.ru/api/authorize/ws"));
34-
socketClient.setOnOpenCallback(() -> {
35-
player.sendMessage(Text.translatable("text.spmhelper.SPmHAPI_GettingLink"));
36-
socketClient.send(json.toString());
37-
});
38-
socketClient.setClientPlayer(player);
39-
socketClient.connect();
40-
} catch (URISyntaxException e) {
41-
player.sendMessage(Text.translatable("text.spmhelper.SPmHAPI_ErrorConnectingServer"));
34+
SocketClient listener = new SocketClient(180, client.player);
35+
webSocket = HttpClient.newHttpClient()
36+
.newWebSocketBuilder()
37+
.buildAsync(URI.create("wss://api.spmhelper.ru/api/authorize/ws"), listener)
38+
.join();
39+
webSocket.sendText(json.toString(), true);
4240
} catch (IllegalStateException Exception) {
4341
player.sendMessage(Text.translatable("text.spmhelper.SPmHAPI_ErrorConnectingWebSocket"));
4442
} catch (Exception e) {

src/main/java/zadudoder/spmhelper/utils/SocketClient.java

Lines changed: 46 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -2,82 +2,72 @@
22

33
import com.google.gson.JsonObject;
44
import com.google.gson.JsonParser;
5-
import me.shedaniel.autoconfig.AutoConfig;
65
import net.minecraft.client.MinecraftClient;
76
import net.minecraft.client.network.ClientPlayerEntity;
87
import net.minecraft.text.Text;
98
import net.minecraft.util.Util;
10-
import org.java_websocket.client.WebSocketClient;
11-
import org.java_websocket.handshake.ServerHandshake;
129
import zadudoder.spmhelper.config.SPmHelperConfig;
1310

14-
import java.net.URI;
15-
import java.util.concurrent.CompletableFuture;
11+
import java.net.http.WebSocket;
12+
import java.util.concurrent.CompletionStage;
13+
import java.util.concurrent.CountDownLatch;
1614

17-
public class SocketClient extends WebSocketClient {
18-
private final CompletableFuture<String> responseFuture = new CompletableFuture<>();
19-
private Runnable onOpenCallback;
20-
private ClientPlayerEntity clientPlayer;
15+
public class SocketClient implements WebSocket.Listener {
16+
private final CountDownLatch latch;
17+
private final StringBuilder aggregatedText = new StringBuilder();
18+
private final ClientPlayerEntity clientPlayer;
2119

22-
public SocketClient(URI serverUri) {
23-
super(serverUri);
20+
public SocketClient(int latch, ClientPlayerEntity clientPlayer) {
21+
this.latch = new CountDownLatch(latch);
22+
this.clientPlayer = clientPlayer;
2423
}
2524

2625
@Override
27-
public void onOpen(ServerHandshake serverHandshake) {
28-
if (onOpenCallback != null) {
29-
onOpenCallback.run(); // Уведомляем, что соединение открыто
30-
}
31-
26+
public void onOpen(WebSocket webSocket) {
27+
//System.out.println("🔵 Соединение установлено");
28+
webSocket.request(1); // Запрашиваем первое сообщение
3229
}
3330

3431
@Override
35-
public void onMessage(String message) {
36-
MinecraftClient client = MinecraftClient.getInstance();
37-
JsonObject responseJson = JsonParser.parseString(message).getAsJsonObject();
38-
System.out.println(responseJson.toString());
39-
if (responseJson.has("auth_url")) {
40-
clientPlayer.sendMessage(Text.translatable("text.spmhelper.WebSocketClient_OpenURL"));
41-
String authUrl = responseJson.get("auth_url").getAsString();
42-
client.execute(() -> {
43-
Util.getOperatingSystem().open(authUrl);
44-
});
45-
clientPlayer.sendMessage(Text.translatable("text.spmhelper.WebSocketClient_WaitingAuth"));
46-
} else if (responseJson.has("token")) {
47-
SPmHelperConfig.get().setAPI_TOKEN(responseJson.get("token").getAsString());
48-
AutoConfig.getConfigHolder(SPmHelperConfig.class).save();
49-
clientPlayer.sendMessage(Text.translatable("text.spmhelper.WebSocketClient_TokenWritten"));
50-
safeClose();
51-
} else if (responseJson.has("error")) {
52-
if (responseJson.get("error").getAsString().equals("Авторизация отклонена игроком")) {
53-
clientPlayer.sendMessage(Text.translatable("text.spmhelper.WebSocketClient_AuthorizationCancelledByYou"));
54-
} else {
55-
clientPlayer.sendMessage(Text.translatable("text.spmhelper.WebSocketClient_FailedToGetLink"));
32+
public CompletionStage<?> onText(WebSocket webSocket, CharSequence data, boolean last) {
33+
//System.out.println("📨 Получено сообщение: " + data);
34+
JsonObject responseJson = JsonParser.parseString(data.toString()).getAsJsonObject();
35+
if (last) {
36+
if (responseJson.has("auth_url")) {
37+
clientPlayer.sendMessage(Text.translatable("text.spmhelper.WebSocketClient_OpenURL"));
38+
String authUrl = responseJson.get("auth_url").getAsString();
39+
MinecraftClient.getInstance().execute(() -> {
40+
Util.getOperatingSystem().open(authUrl);
41+
});
42+
clientPlayer.sendMessage(Text.translatable("text.spmhelper.WebSocketClient_WaitingAuth"));
43+
} else if (responseJson.has("token")) {
44+
SPmHelperConfig.get().setToken(responseJson.get("token").getAsString());
45+
clientPlayer.sendMessage(Text.translatable("text.spmhelper.WebSocketClient_TokenWritten"));
46+
SPmHelperApi.webSocket.abort();
47+
} else if (responseJson.has("error")) {
48+
if (responseJson.get("error").getAsString().equals("Authorization denied by user")) {
49+
clientPlayer.sendMessage(Text.translatable("text.spmhelper.WebSocketClient_AuthorizationCancelledByYou"));
50+
} else {
51+
clientPlayer.sendMessage(Text.translatable("text.spmhelper.WebSocketClient_FailedToGetLink"));
52+
}
53+
SPmHelperApi.webSocket.abort();
5654
}
57-
safeClose();
5855
}
56+
aggregatedText.setLength(0);
57+
webSocket.request(1);
58+
return null;
5959
}
6060

6161
@Override
62-
public void onClose(int i, String s, boolean b) {
62+
public CompletionStage<?> onClose(WebSocket webSocket, int statusCode, String reason) {
63+
//System.out.println("🔴 Соединение закрыто: " + statusCode + " - " + reason);
64+
latch.countDown();
65+
return null;
6366
}
6467

6568
@Override
66-
public void onError(Exception e) {
67-
responseFuture.completeExceptionally(e);
68-
}
69-
70-
public void setOnOpenCallback(Runnable callback) {
71-
this.onOpenCallback = callback;
72-
}
73-
74-
public void setClientPlayer(ClientPlayerEntity client) {
75-
this.clientPlayer = client;
76-
}
77-
78-
private void safeClose() {
79-
if (isOpen()) {
80-
close();
81-
}
69+
public void onError(WebSocket webSocket, Throwable error) {
70+
error.printStackTrace();
71+
latch.countDown(); // Разблокируем основной поток
8272
}
83-
}
73+
}

0 commit comments

Comments
 (0)