From 452a2f4db5da29c0e3a2a3baeb94eb03a4511a15 Mon Sep 17 00:00:00 2001 From: MEFRREEX Date: Tue, 7 Oct 2025 16:01:54 +0400 Subject: [PATCH 1/2] feat: added typed handler --- .../bridge/network/AbstractBridgeNetwork.java | 10 ++- .../bridge/network/BridgeNetwork.java | 10 ++- .../handler/BridgeSinglePacketHandler.java | 9 +++ .../handler/TypedBridgePacketHandler.java | 22 +++++++ .../com/luminiadev/bridge/network/Test.java | 64 +++++++++++++++++++ build.gradle.kts | 2 +- 6 files changed, 114 insertions(+), 3 deletions(-) create mode 100644 bridge-common/src/main/java/com/luminiadev/bridge/network/codec/packet/handler/BridgeSinglePacketHandler.java create mode 100644 bridge-common/src/main/java/com/luminiadev/bridge/network/codec/packet/handler/TypedBridgePacketHandler.java create mode 100644 bridge-rabbitmq/src/main/java/com/luminiadev/bridge/network/Test.java diff --git a/bridge-common/src/main/java/com/luminiadev/bridge/network/AbstractBridgeNetwork.java b/bridge-common/src/main/java/com/luminiadev/bridge/network/AbstractBridgeNetwork.java index ebbdae2..572144a 100644 --- a/bridge-common/src/main/java/com/luminiadev/bridge/network/AbstractBridgeNetwork.java +++ b/bridge-common/src/main/java/com/luminiadev/bridge/network/AbstractBridgeNetwork.java @@ -4,6 +4,8 @@ import com.luminiadev.bridge.network.codec.BridgeCodec; import com.luminiadev.bridge.network.codec.packet.BridgePacket; import com.luminiadev.bridge.network.codec.packet.handler.BridgePacketHandler; +import com.luminiadev.bridge.network.codec.packet.handler.BridgeSinglePacketHandler; +import com.luminiadev.bridge.network.codec.packet.handler.TypedBridgePacketHandler; import io.netty.buffer.ByteBuf; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.UnmodifiableView; @@ -36,8 +38,14 @@ public void setCodec(BridgeCodec codec) { } @Override - public void addPacketHandler(BridgePacketHandler handler) { + public BridgePacketHandler addPacketHandler(BridgePacketHandler handler) { handlers.add(handler); + return handler; + } + + @Override + public BridgePacketHandler addPacketHandler(Class packetClass, BridgeSinglePacketHandler handler) { + return this.addPacketHandler(new TypedBridgePacketHandler<>(packetClass, handler)); } @Override diff --git a/bridge-common/src/main/java/com/luminiadev/bridge/network/BridgeNetwork.java b/bridge-common/src/main/java/com/luminiadev/bridge/network/BridgeNetwork.java index ed4e1de..201d7cd 100644 --- a/bridge-common/src/main/java/com/luminiadev/bridge/network/BridgeNetwork.java +++ b/bridge-common/src/main/java/com/luminiadev/bridge/network/BridgeNetwork.java @@ -4,6 +4,7 @@ import com.luminiadev.bridge.network.codec.BridgeCodec; import com.luminiadev.bridge.network.codec.packet.BridgePacket; import com.luminiadev.bridge.network.codec.packet.handler.BridgePacketHandler; +import com.luminiadev.bridge.network.codec.packet.handler.BridgeSinglePacketHandler; import io.netty.buffer.ByteBuf; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -50,7 +51,14 @@ public interface BridgeNetwork { * * @param handler The BridgePacketHandler */ - void addPacketHandler(BridgePacketHandler handler); + BridgePacketHandler addPacketHandler(BridgePacketHandler handler); + + /** + * Add a packet handler. + * + * @param handler The BridgePacketHandler + */ + BridgePacketHandler addPacketHandler(Class packetClass, BridgeSinglePacketHandler handler); /** * Remove a packet handler. diff --git a/bridge-common/src/main/java/com/luminiadev/bridge/network/codec/packet/handler/BridgeSinglePacketHandler.java b/bridge-common/src/main/java/com/luminiadev/bridge/network/codec/packet/handler/BridgeSinglePacketHandler.java new file mode 100644 index 0000000..7fcd2cb --- /dev/null +++ b/bridge-common/src/main/java/com/luminiadev/bridge/network/codec/packet/handler/BridgeSinglePacketHandler.java @@ -0,0 +1,9 @@ +package com.luminiadev.bridge.network.codec.packet.handler; + +import com.luminiadev.bridge.network.codec.packet.BridgePacket; +import com.luminiadev.bridge.network.codec.packet.BridgePacketDirection; + +@FunctionalInterface +public interface BridgeSinglePacketHandler { + void handle(T packet, BridgePacketDirection direction, String serviceId); +} diff --git a/bridge-common/src/main/java/com/luminiadev/bridge/network/codec/packet/handler/TypedBridgePacketHandler.java b/bridge-common/src/main/java/com/luminiadev/bridge/network/codec/packet/handler/TypedBridgePacketHandler.java new file mode 100644 index 0000000..41c485a --- /dev/null +++ b/bridge-common/src/main/java/com/luminiadev/bridge/network/codec/packet/handler/TypedBridgePacketHandler.java @@ -0,0 +1,22 @@ +package com.luminiadev.bridge.network.codec.packet.handler; + +import com.luminiadev.bridge.network.codec.packet.BridgePacket; +import com.luminiadev.bridge.network.codec.packet.BridgePacketDirection; + +public final class TypedBridgePacketHandler implements BridgePacketHandler { + + private final Class type; + private final BridgeSinglePacketHandler handler; + + public TypedBridgePacketHandler(Class type, BridgeSinglePacketHandler handler) { + this.type = type; + this.handler = handler; + } + + @Override + public void handle(BridgePacket packet, BridgePacketDirection direction, String serviceId) { + if (type.isInstance(packet)) { + handler.handle(type.cast(packet), direction, serviceId); + } + } +} diff --git a/bridge-rabbitmq/src/main/java/com/luminiadev/bridge/network/Test.java b/bridge-rabbitmq/src/main/java/com/luminiadev/bridge/network/Test.java new file mode 100644 index 0000000..3026396 --- /dev/null +++ b/bridge-rabbitmq/src/main/java/com/luminiadev/bridge/network/Test.java @@ -0,0 +1,64 @@ +package com.luminiadev.bridge.network; + +import com.luminiadev.bridge.network.codec.BridgeCodec; +import com.luminiadev.bridge.network.codec.packet.BridgePacket; +import com.luminiadev.bridge.network.codec.packet.BridgePacketDirection; +import com.luminiadev.bridge.network.codec.packet.handler.BridgePacketHandler; +import com.luminiadev.bridge.network.codec.packet.serializer.BridgePacketSerializer; +import com.luminiadev.bridge.network.codec.packet.serializer.BridgePacketSerializerHelper; +import io.netty.buffer.ByteBuf; +import lombok.Data; +import org.jetbrains.annotations.NotNull; + +import java.util.UUID; + +public class Test { + + public static void main(String[] args) { + BridgeNetwork bridge = new BridgeRabbitMQNetwork(BridgeRabbitMQConfig.builder() + .credentials(new BridgeRabbitMQCredentials("guest", "guest")) + .serviceId("service-1") + .build()); + + bridge.setCodec(BridgeCodec.builder() + .registerPacket("message", MessagePacket::new, new MessagePacket.MessagePacketSerializer()) + .build()); + bridge.start(); + + bridge.addPacketHandler(MessagePacket.class, (packet, direction, serviceId) -> { + System.out.println(direction + " Received packet: " + packet); + }); + + MessagePacket packet = new MessagePacket(); + packet.setMessage("Message 1"); + packet.setUuid(UUID.randomUUID().toString()); + bridge.sendPacket(packet); + } + + @Data + public static class MessagePacket implements BridgePacket { + + private String message; + private String uuid; + + @Override + public @NotNull String getId() { + return "message"; + } + + public static class MessagePacketSerializer implements BridgePacketSerializer { + + @Override + public void serialize(ByteBuf buffer, BridgePacketSerializerHelper helper, MessagePacket packet) { + helper.writeString(packet.getMessage()); + helper.writeString(packet.getUuid()); + } + + @Override + public void deserialize(ByteBuf buffer, BridgePacketSerializerHelper helper, MessagePacket packet) { + packet.setMessage(helper.readString()); + packet.setUuid(helper.readString()); + } + } + } +} diff --git a/build.gradle.kts b/build.gradle.kts index 3e51e37..3c421c3 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -12,7 +12,7 @@ java { allprojects { group = "com.luminiadev.bridge" - version = "1.0.6-SNAPSHOT" + version = "1.1.0-SNAPSHOT" } subprojects { From d16bf3ab8a91ed8ce19880e15f17fcae9c75a020 Mon Sep 17 00:00:00 2001 From: MEFRREEX Date: Tue, 7 Oct 2025 16:07:28 +0400 Subject: [PATCH 2/2] feat: javadoc + remove test code --- .../bridge/network/BridgeNetwork.java | 9 ++- .../handler/BridgeSinglePacketHandler.java | 14 ++++ .../handler/TypedBridgePacketHandler.java | 15 +++-- .../com/luminiadev/bridge/network/Test.java | 64 ------------------- 4 files changed, 30 insertions(+), 72 deletions(-) delete mode 100644 bridge-rabbitmq/src/main/java/com/luminiadev/bridge/network/Test.java diff --git a/bridge-common/src/main/java/com/luminiadev/bridge/network/BridgeNetwork.java b/bridge-common/src/main/java/com/luminiadev/bridge/network/BridgeNetwork.java index 201d7cd..a2b2d50 100644 --- a/bridge-common/src/main/java/com/luminiadev/bridge/network/BridgeNetwork.java +++ b/bridge-common/src/main/java/com/luminiadev/bridge/network/BridgeNetwork.java @@ -49,14 +49,17 @@ public interface BridgeNetwork { /** * Add a packet handler. * - * @param handler The BridgePacketHandler + * @param handler the BridgePacketHandler + * @return the added packet handler */ BridgePacketHandler addPacketHandler(BridgePacketHandler handler); /** - * Add a packet handler. + * Add a typed packet handler. * - * @param handler The BridgePacketHandler + * @param packetClass the class of packet + * @param handler the BridgeSinglePacketHandler + * @return the added TypedBridgePacketHandler */ BridgePacketHandler addPacketHandler(Class packetClass, BridgeSinglePacketHandler handler); diff --git a/bridge-common/src/main/java/com/luminiadev/bridge/network/codec/packet/handler/BridgeSinglePacketHandler.java b/bridge-common/src/main/java/com/luminiadev/bridge/network/codec/packet/handler/BridgeSinglePacketHandler.java index 7fcd2cb..d4c5fce 100644 --- a/bridge-common/src/main/java/com/luminiadev/bridge/network/codec/packet/handler/BridgeSinglePacketHandler.java +++ b/bridge-common/src/main/java/com/luminiadev/bridge/network/codec/packet/handler/BridgeSinglePacketHandler.java @@ -3,7 +3,21 @@ import com.luminiadev.bridge.network.codec.packet.BridgePacket; import com.luminiadev.bridge.network.codec.packet.BridgePacketDirection; +/** + * The handler for handling one type of packet. + * + * @param Packet type to handle + * @see TypedBridgePacketHandler + */ @FunctionalInterface public interface BridgeSinglePacketHandler { + + /** + * Called when a packet is sent or received by the service. + * + * @param packet Packet object + * @param direction Packet direction (from or to service) + * @param serviceId Sender's service Id + */ void handle(T packet, BridgePacketDirection direction, String serviceId); } diff --git a/bridge-common/src/main/java/com/luminiadev/bridge/network/codec/packet/handler/TypedBridgePacketHandler.java b/bridge-common/src/main/java/com/luminiadev/bridge/network/codec/packet/handler/TypedBridgePacketHandler.java index 41c485a..fcf612b 100644 --- a/bridge-common/src/main/java/com/luminiadev/bridge/network/codec/packet/handler/TypedBridgePacketHandler.java +++ b/bridge-common/src/main/java/com/luminiadev/bridge/network/codec/packet/handler/TypedBridgePacketHandler.java @@ -3,20 +3,25 @@ import com.luminiadev.bridge.network.codec.packet.BridgePacket; import com.luminiadev.bridge.network.codec.packet.BridgePacketDirection; +/** + * Internal implementation of handler to handle one type of packet. + * + * @param Packet type to handle + */ public final class TypedBridgePacketHandler implements BridgePacketHandler { - private final Class type; + private final Class packetClass; private final BridgeSinglePacketHandler handler; - public TypedBridgePacketHandler(Class type, BridgeSinglePacketHandler handler) { - this.type = type; + public TypedBridgePacketHandler(Class packetClass, BridgeSinglePacketHandler handler) { + this.packetClass = packetClass; this.handler = handler; } @Override public void handle(BridgePacket packet, BridgePacketDirection direction, String serviceId) { - if (type.isInstance(packet)) { - handler.handle(type.cast(packet), direction, serviceId); + if (packetClass.isInstance(packet)) { + handler.handle(packetClass.cast(packet), direction, serviceId); } } } diff --git a/bridge-rabbitmq/src/main/java/com/luminiadev/bridge/network/Test.java b/bridge-rabbitmq/src/main/java/com/luminiadev/bridge/network/Test.java deleted file mode 100644 index 3026396..0000000 --- a/bridge-rabbitmq/src/main/java/com/luminiadev/bridge/network/Test.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.luminiadev.bridge.network; - -import com.luminiadev.bridge.network.codec.BridgeCodec; -import com.luminiadev.bridge.network.codec.packet.BridgePacket; -import com.luminiadev.bridge.network.codec.packet.BridgePacketDirection; -import com.luminiadev.bridge.network.codec.packet.handler.BridgePacketHandler; -import com.luminiadev.bridge.network.codec.packet.serializer.BridgePacketSerializer; -import com.luminiadev.bridge.network.codec.packet.serializer.BridgePacketSerializerHelper; -import io.netty.buffer.ByteBuf; -import lombok.Data; -import org.jetbrains.annotations.NotNull; - -import java.util.UUID; - -public class Test { - - public static void main(String[] args) { - BridgeNetwork bridge = new BridgeRabbitMQNetwork(BridgeRabbitMQConfig.builder() - .credentials(new BridgeRabbitMQCredentials("guest", "guest")) - .serviceId("service-1") - .build()); - - bridge.setCodec(BridgeCodec.builder() - .registerPacket("message", MessagePacket::new, new MessagePacket.MessagePacketSerializer()) - .build()); - bridge.start(); - - bridge.addPacketHandler(MessagePacket.class, (packet, direction, serviceId) -> { - System.out.println(direction + " Received packet: " + packet); - }); - - MessagePacket packet = new MessagePacket(); - packet.setMessage("Message 1"); - packet.setUuid(UUID.randomUUID().toString()); - bridge.sendPacket(packet); - } - - @Data - public static class MessagePacket implements BridgePacket { - - private String message; - private String uuid; - - @Override - public @NotNull String getId() { - return "message"; - } - - public static class MessagePacketSerializer implements BridgePacketSerializer { - - @Override - public void serialize(ByteBuf buffer, BridgePacketSerializerHelper helper, MessagePacket packet) { - helper.writeString(packet.getMessage()); - helper.writeString(packet.getUuid()); - } - - @Override - public void deserialize(ByteBuf buffer, BridgePacketSerializerHelper helper, MessagePacket packet) { - packet.setMessage(helper.readString()); - packet.setUuid(helper.readString()); - } - } - } -}