mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2026-05-25 21:49:56 +08:00
Format code [skip actions]
This commit is contained in:
@@ -1,17 +1,13 @@
|
||||
package emu.grasscutter.server.dispatch;
|
||||
|
||||
import static emu.grasscutter.config.Configuration.DISPATCH_INFO;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.server.game.GameServer;
|
||||
import emu.grasscutter.server.http.handlers.GachaHandler;
|
||||
import emu.grasscutter.utils.Crypto;
|
||||
import lombok.Getter;
|
||||
import org.java_websocket.WebSocket;
|
||||
import org.java_websocket.client.WebSocketClient;
|
||||
import org.java_websocket.handshake.ServerHandshake;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
import java.net.ConnectException;
|
||||
import java.net.URI;
|
||||
import java.nio.ByteBuffer;
|
||||
@@ -21,17 +17,17 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import static emu.grasscutter.config.Configuration.DISPATCH_INFO;
|
||||
import lombok.Getter;
|
||||
import org.java_websocket.WebSocket;
|
||||
import org.java_websocket.client.WebSocketClient;
|
||||
import org.java_websocket.handshake.ServerHandshake;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
public final class DispatchClient extends WebSocketClient implements IDispatcher {
|
||||
@Getter private final Logger logger
|
||||
= Grasscutter.getLogger();
|
||||
@Getter private final Map<Integer, BiConsumer<WebSocket, JsonElement>> handlers
|
||||
= new HashMap<>();
|
||||
@Getter private final Logger logger = Grasscutter.getLogger();
|
||||
@Getter private final Map<Integer, BiConsumer<WebSocket, JsonElement>> handlers = new HashMap<>();
|
||||
|
||||
@Getter private final Map<Integer, List<Consumer<JsonElement>>> callbacks
|
||||
= new HashMap<>();
|
||||
@Getter private final Map<Integer, List<Consumer<JsonElement>>> callbacks = new HashMap<>();
|
||||
|
||||
public DispatchClient(URI serverUri) {
|
||||
super(serverUri);
|
||||
@@ -58,8 +54,7 @@ public final class DispatchClient extends WebSocketClient implements IDispatcher
|
||||
var response = new JsonObject();
|
||||
|
||||
// Find a player with the specified account ID.
|
||||
var player = Grasscutter.getGameServer()
|
||||
.getPlayerByAccountId(accountId);
|
||||
var player = Grasscutter.getGameServer().getPlayerByAccountId(accountId);
|
||||
if (player == null) {
|
||||
response.addProperty("retcode", 1);
|
||||
this.sendMessage(PacketIds.GachaHistoryRsp, response);
|
||||
@@ -67,8 +62,7 @@ public final class DispatchClient extends WebSocketClient implements IDispatcher
|
||||
}
|
||||
|
||||
// Fetch the gacha records.
|
||||
GachaHandler.fetchGachaRecords(
|
||||
player, response, page, type);
|
||||
GachaHandler.fetchGachaRecords(player, response, page, type);
|
||||
|
||||
// Send the response.
|
||||
this.sendMessage(PacketIds.GachaHistoryRsp, response);
|
||||
@@ -82,8 +76,7 @@ public final class DispatchClient extends WebSocketClient implements IDispatcher
|
||||
public void sendMessage(int packetId, Object message) {
|
||||
var serverMessage = this.encodeMessage(packetId, message);
|
||||
// Serialize the message into JSON.
|
||||
var serialized = JSON.toJson(serverMessage)
|
||||
.getBytes(StandardCharsets.UTF_8);
|
||||
var serialized = JSON.toJson(serverMessage).getBytes(StandardCharsets.UTF_8);
|
||||
// Encrypt the message.
|
||||
Crypto.xor(serialized, DISPATCH_INFO.encryptionKey);
|
||||
// Send the message.
|
||||
@@ -100,8 +93,7 @@ public final class DispatchClient extends WebSocketClient implements IDispatcher
|
||||
|
||||
@Override
|
||||
public void onMessage(String message) {
|
||||
this.getLogger().debug("Received dispatch message from server:\n{}",
|
||||
message);
|
||||
this.getLogger().debug("Received dispatch message from server:\n{}", message);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -114,17 +106,20 @@ public final class DispatchClient extends WebSocketClient implements IDispatcher
|
||||
this.getLogger().info("Dispatch connection closed.");
|
||||
|
||||
// Attempt to reconnect.
|
||||
new Thread(() -> {
|
||||
try {
|
||||
// Wait 5 seconds before reconnecting.
|
||||
Thread.sleep(5000L);
|
||||
} catch (Exception ignored) { }
|
||||
new Thread(
|
||||
() -> {
|
||||
try {
|
||||
// Wait 5 seconds before reconnecting.
|
||||
Thread.sleep(5000L);
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
|
||||
// Attempt to reconnect.
|
||||
Grasscutter.getGameServer().setDispatchClient(
|
||||
new DispatchClient(GameServer.getDispatchUrl()));
|
||||
Grasscutter.getGameServer().getDispatchClient().connect();
|
||||
}).start();
|
||||
// Attempt to reconnect.
|
||||
Grasscutter.getGameServer()
|
||||
.setDispatchClient(new DispatchClient(GameServer.getDispatchUrl()));
|
||||
Grasscutter.getGameServer().getDispatchClient().connect();
|
||||
})
|
||||
.start();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,16 +1,12 @@
|
||||
package emu.grasscutter.server.dispatch;
|
||||
|
||||
import static emu.grasscutter.config.Configuration.DISPATCH_INFO;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.database.DatabaseHelper;
|
||||
import emu.grasscutter.utils.Crypto;
|
||||
import lombok.Getter;
|
||||
import org.java_websocket.WebSocket;
|
||||
import org.java_websocket.handshake.ClientHandshake;
|
||||
import org.java_websocket.server.WebSocketServer;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
import java.net.InetSocketAddress;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
@@ -19,18 +15,18 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import static emu.grasscutter.config.Configuration.DISPATCH_INFO;
|
||||
import lombok.Getter;
|
||||
import org.java_websocket.WebSocket;
|
||||
import org.java_websocket.handshake.ClientHandshake;
|
||||
import org.java_websocket.server.WebSocketServer;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
/* Internal communications server. */
|
||||
public final class DispatchServer extends WebSocketServer implements IDispatcher {
|
||||
@Getter private final Logger logger
|
||||
= Grasscutter.getLogger();
|
||||
@Getter private final Map<Integer, BiConsumer<WebSocket, JsonElement>> handlers
|
||||
= new HashMap<>();
|
||||
@Getter private final Logger logger = Grasscutter.getLogger();
|
||||
@Getter private final Map<Integer, BiConsumer<WebSocket, JsonElement>> handlers = new HashMap<>();
|
||||
|
||||
@Getter private final Map<Integer, List<Consumer<JsonElement>>> callbacks
|
||||
= new HashMap<>();
|
||||
@Getter private final Map<Integer, List<Consumer<JsonElement>>> callbacks = new HashMap<>();
|
||||
|
||||
/**
|
||||
* Constructs a new {@code DispatchServer} instance.
|
||||
@@ -52,15 +48,13 @@ public final class DispatchServer extends WebSocketServer implements IDispatcher
|
||||
* @param object The packet data.
|
||||
*/
|
||||
private void handleLogin(WebSocket socket, JsonElement object) {
|
||||
var dispatchKey = object.getAsString()
|
||||
.replaceAll("\"", "");
|
||||
var dispatchKey = object.getAsString().replaceAll("\"", "");
|
||||
|
||||
// Check if the dispatch key is valid.
|
||||
if (!dispatchKey.equals(DISPATCH_INFO.dispatchKey)) {
|
||||
this.getLogger().warn("Invalid dispatch key received from {}.",
|
||||
socket.getRemoteSocketAddress());
|
||||
this.getLogger().debug("Expected: {}, Received: {}",
|
||||
DISPATCH_INFO.dispatchKey, dispatchKey);
|
||||
this.getLogger()
|
||||
.warn("Invalid dispatch key received from {}.", socket.getRemoteSocketAddress());
|
||||
this.getLogger().debug("Expected: {}, Received: {}", DISPATCH_INFO.dispatchKey, dispatchKey);
|
||||
socket.close();
|
||||
} else {
|
||||
socket.setAttachment(true);
|
||||
@@ -84,8 +78,7 @@ public final class DispatchServer extends WebSocketServer implements IDispatcher
|
||||
// Create the response message.
|
||||
var response = new JsonObject();
|
||||
response.addProperty("valid", valid);
|
||||
if (valid) response.add("account",
|
||||
JSON.toJsonTree(account));
|
||||
if (valid) response.add("account", JSON.toJsonTree(account));
|
||||
|
||||
// Send the response.
|
||||
this.sendMessage(socket, PacketIds.TokenValidateRsp, response);
|
||||
@@ -98,8 +91,7 @@ public final class DispatchServer extends WebSocketServer implements IDispatcher
|
||||
*/
|
||||
public void sendMessage(int packetId, Object message) {
|
||||
var serverMessage = this.encodeMessage(packetId, message);
|
||||
this.getConnections().forEach(
|
||||
socket -> this.sendMessage(socket, serverMessage));
|
||||
this.getConnections().forEach(socket -> this.sendMessage(socket, serverMessage));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -110,8 +102,7 @@ public final class DispatchServer extends WebSocketServer implements IDispatcher
|
||||
*/
|
||||
public void sendMessage(WebSocket socket, Object message) {
|
||||
// Serialize the message into JSON.
|
||||
var serialized = JSON.toJson(message)
|
||||
.getBytes(StandardCharsets.UTF_8);
|
||||
var serialized = JSON.toJson(message).getBytes(StandardCharsets.UTF_8);
|
||||
// Encrypt the message.
|
||||
Crypto.xor(serialized, DISPATCH_INFO.encryptionKey);
|
||||
// Send the message.
|
||||
@@ -131,20 +122,18 @@ public final class DispatchServer extends WebSocketServer implements IDispatcher
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
this.getLogger().info("Dispatch server started on port {}.",
|
||||
this.getPort());
|
||||
this.getLogger().info("Dispatch server started on port {}.", this.getPort());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onOpen(WebSocket conn, ClientHandshake handshake) {
|
||||
this.getLogger().debug("Dispatch client connected from {}.",
|
||||
conn.getRemoteSocketAddress());
|
||||
this.getLogger().debug("Dispatch client connected from {}.", conn.getRemoteSocketAddress());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMessage(WebSocket conn, String message) {
|
||||
this.getLogger().debug("Received dispatch message from {}:\n{}",
|
||||
conn.getRemoteSocketAddress(), message);
|
||||
this.getLogger()
|
||||
.debug("Received dispatch message from {}:\n{}", conn.getRemoteSocketAddress(), message);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -154,8 +143,7 @@ public final class DispatchServer extends WebSocketServer implements IDispatcher
|
||||
|
||||
@Override
|
||||
public void onClose(WebSocket conn, int code, String reason, boolean remote) {
|
||||
this.getLogger().debug("Dispatch client disconnected from {}.",
|
||||
conn.getRemoteSocketAddress());
|
||||
this.getLogger().debug("Dispatch client disconnected from {}.", conn.getRemoteSocketAddress());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,28 +1,28 @@
|
||||
package emu.grasscutter.server.dispatch;
|
||||
|
||||
import static emu.grasscutter.config.Configuration.DISPATCH_INFO;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import emu.grasscutter.utils.Crypto;
|
||||
import emu.grasscutter.utils.JsonAdapters.ByteArrayAdapter;
|
||||
import org.java_websocket.WebSocket;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import static emu.grasscutter.config.Configuration.DISPATCH_INFO;
|
||||
import org.java_websocket.WebSocket;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
public interface IDispatcher {
|
||||
Gson JSON = new GsonBuilder()
|
||||
.disableHtmlEscaping()
|
||||
.registerTypeAdapter(byte[].class, new ByteArrayAdapter())
|
||||
.create();
|
||||
Gson JSON =
|
||||
new GsonBuilder()
|
||||
.disableHtmlEscaping()
|
||||
.registerTypeAdapter(byte[].class, new ByteArrayAdapter())
|
||||
.create();
|
||||
|
||||
/**
|
||||
* Decodes an escaped JSON message.
|
||||
@@ -47,8 +47,7 @@ public interface IDispatcher {
|
||||
var data = element.getAsString();
|
||||
|
||||
// Check if the element starts and ends with quotes.
|
||||
if (data.startsWith("\"")
|
||||
&& data.endsWith("\"")) {
|
||||
if (data.startsWith("\"") && data.endsWith("\"")) {
|
||||
// Remove the quotes.
|
||||
data = data.substring(1, data.length() - 1);
|
||||
}
|
||||
@@ -72,8 +71,7 @@ public interface IDispatcher {
|
||||
// Decrypt the message.
|
||||
Crypto.xor(message, DISPATCH_INFO.encryptionKey);
|
||||
// Deserialize the message.
|
||||
return JSON.fromJson(new String(
|
||||
message, StandardCharsets.UTF_8), JsonObject.class);
|
||||
return JSON.fromJson(new String(message, StandardCharsets.UTF_8), JsonObject.class);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -116,8 +114,7 @@ public interface IDispatcher {
|
||||
if (packetId != PacketIds.LoginNotify) {
|
||||
if (socket.getAttachment() instanceof Boolean authenticated) {
|
||||
if (!authenticated) {
|
||||
this.getLogger().warn("Received packet ID {} from unauthenticated client.",
|
||||
packetId);
|
||||
this.getLogger().warn("Received packet ID {} from unauthenticated client.", packetId);
|
||||
socket.close();
|
||||
return;
|
||||
}
|
||||
@@ -138,13 +135,11 @@ public interface IDispatcher {
|
||||
// Get the callbacks.
|
||||
var callbacks = this.getCallbacks().get(packetId);
|
||||
// Call the callbacks.
|
||||
callbacks.forEach(callback ->
|
||||
callback.accept(packetData));
|
||||
callbacks.forEach(callback -> callback.accept(packetData));
|
||||
callbacks.clear();
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
this.getLogger().warn("Exception occurred while handling packet {}.",
|
||||
packetId);
|
||||
this.getLogger().warn("Exception occurred while handling packet {}.", packetId);
|
||||
exception.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user