From bbd7e7ba68304af43f19eeb21388d7cdc4f3a6a9 Mon Sep 17 00:00:00 2001 From: Wzp-2008 Date: Sun, 15 Dec 2024 23:15:16 +0800 Subject: [PATCH] feat: add original packet name field on base packet --- .../org/mmga/clubs/controller/ChessController.java | 11 +++++++---- .../entities/chess/packet/BaseWebSocketPacket.java | 13 +++++++++++++ .../java/org/mmga/clubs/utils/WebSocketUtils.java | 5 +++++ 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/mmga/clubs/controller/ChessController.java b/src/main/java/org/mmga/clubs/controller/ChessController.java index 0fd8c8d..b19252f 100644 --- a/src/main/java/org/mmga/clubs/controller/ChessController.java +++ b/src/main/java/org/mmga/clubs/controller/ChessController.java @@ -72,9 +72,13 @@ public class ChessController { public void onMessage(String message, Session session) { try { JSONObject jsonObject = JSON.parseObject(message); - Object response = handleMessage(jsonObject, session); + String packetName = jsonObject.getString("name"); + if (packetName == null) { + WebSocketUtils.sendPacket(new ErrorPacket("包内缺少name字段!"), session); + } + Object response = handleMessage(jsonObject, packetName, session); if (response != null) { - WebSocketUtils.sendPacket(response, session); + WebSocketUtils.sendPacket(response, packetName, session); } } catch (JSONException e) { WebSocketUtils.sendPacket(new ErrorPacket("JSON格式错误"), session); @@ -83,8 +87,7 @@ public class ChessController { } @Nullable - public Object handleMessage(JSONObject object, Session session) { - String packetName = object.getString("name"); + public Object handleMessage(JSONObject object, String packetName, Session session) { if (packetName == null) return new ErrorPacket("错误的请求类型"); try { Class packetType = Class.forName("org.mmga.clubs.entities.chess.packet.request." + packetName + "Request"); diff --git a/src/main/java/org/mmga/clubs/entities/chess/packet/BaseWebSocketPacket.java b/src/main/java/org/mmga/clubs/entities/chess/packet/BaseWebSocketPacket.java index e9e97a3..e284167 100644 --- a/src/main/java/org/mmga/clubs/entities/chess/packet/BaseWebSocketPacket.java +++ b/src/main/java/org/mmga/clubs/entities/chess/packet/BaseWebSocketPacket.java @@ -1,11 +1,15 @@ package org.mmga.clubs.entities.chess.packet; +import jakarta.annotation.Nullable; import lombok.Data; +import lombok.NonNull; @Data public class BaseWebSocketPacket { private String name; private Object payload; + @Nullable + private String originalPacketName; public BaseWebSocketPacket(Object payload) { Class aClass = payload.getClass(); @@ -13,7 +17,16 @@ public class BaseWebSocketPacket { this.payload = payload; } + public BaseWebSocketPacket(Object payload, @NonNull String originalPacketName) { + this(payload); + this.originalPacketName = originalPacketName; + } + public static BaseWebSocketPacket of(Object payload) { return new BaseWebSocketPacket(payload); } + + public static BaseWebSocketPacket of(Object packet, @NonNull String originalPacketName) { + return new BaseWebSocketPacket(packet, originalPacketName); + } } diff --git a/src/main/java/org/mmga/clubs/utils/WebSocketUtils.java b/src/main/java/org/mmga/clubs/utils/WebSocketUtils.java index 15681e9..0e1d4de 100644 --- a/src/main/java/org/mmga/clubs/utils/WebSocketUtils.java +++ b/src/main/java/org/mmga/clubs/utils/WebSocketUtils.java @@ -12,6 +12,7 @@ public class WebSocketUtils { public static void sendJsonMessage(@NonNull JSONObject message, @NonNull Session session) { session.getAsyncRemote().sendText(message.toJSONString()); } + public static void sendMessage(@NonNull Object object, @NonNull Session session) { sendJsonMessage(JSONObject.from(object), session); } @@ -20,6 +21,10 @@ public class WebSocketUtils { sendMessage(BaseWebSocketPacket.of(packet), session); } + public static void sendPacket(@NonNull Object packet, String originalPacketName, @NonNull Session session) { + sendMessage(BaseWebSocketPacket.of(packet, originalPacketName), session); + } + public static void sendPacketIfPossible(@NonNull Object packet, @Nullable Session session) { if (Objects.isNull(session)) return; sendPacket(packet, session);