Skip to content

Commit 420f2b3

Browse files
authored
Merge pull request #9 from LuminiaDev/feat/typed-handlers
feat: typed handlers
2 parents bf1335c + d16bf3a commit 420f2b3

File tree

5 files changed

+73
-4
lines changed

5 files changed

+73
-4
lines changed

bridge-common/src/main/java/com/luminiadev/bridge/network/AbstractBridgeNetwork.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import com.luminiadev.bridge.network.codec.BridgeCodec;
55
import com.luminiadev.bridge.network.codec.packet.BridgePacket;
66
import com.luminiadev.bridge.network.codec.packet.handler.BridgePacketHandler;
7+
import com.luminiadev.bridge.network.codec.packet.handler.BridgeSinglePacketHandler;
8+
import com.luminiadev.bridge.network.codec.packet.handler.TypedBridgePacketHandler;
79
import io.netty.buffer.ByteBuf;
810
import org.jetbrains.annotations.Nullable;
911
import org.jetbrains.annotations.UnmodifiableView;
@@ -36,8 +38,14 @@ public void setCodec(BridgeCodec codec) {
3638
}
3739

3840
@Override
39-
public void addPacketHandler(BridgePacketHandler handler) {
41+
public BridgePacketHandler addPacketHandler(BridgePacketHandler handler) {
4042
handlers.add(handler);
43+
return handler;
44+
}
45+
46+
@Override
47+
public <T extends BridgePacket> BridgePacketHandler addPacketHandler(Class<T> packetClass, BridgeSinglePacketHandler<T> handler) {
48+
return this.addPacketHandler(new TypedBridgePacketHandler<>(packetClass, handler));
4149
}
4250

4351
@Override

bridge-common/src/main/java/com/luminiadev/bridge/network/BridgeNetwork.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.luminiadev.bridge.network.codec.BridgeCodec;
55
import com.luminiadev.bridge.network.codec.packet.BridgePacket;
66
import com.luminiadev.bridge.network.codec.packet.handler.BridgePacketHandler;
7+
import com.luminiadev.bridge.network.codec.packet.handler.BridgeSinglePacketHandler;
78
import io.netty.buffer.ByteBuf;
89
import org.jetbrains.annotations.NotNull;
910
import org.jetbrains.annotations.Nullable;
@@ -48,9 +49,19 @@ public interface BridgeNetwork {
4849
/**
4950
* Add a packet handler.
5051
*
51-
* @param handler The BridgePacketHandler
52+
* @param handler the BridgePacketHandler
53+
* @return the added packet handler
54+
*/
55+
BridgePacketHandler addPacketHandler(BridgePacketHandler handler);
56+
57+
/**
58+
* Add a typed packet handler.
59+
*
60+
* @param packetClass the class of packet
61+
* @param handler the BridgeSinglePacketHandler
62+
* @return the added TypedBridgePacketHandler
5263
*/
53-
void addPacketHandler(BridgePacketHandler handler);
64+
<T extends BridgePacket> BridgePacketHandler addPacketHandler(Class<T> packetClass, BridgeSinglePacketHandler<T> handler);
5465

5566
/**
5667
* Remove a packet handler.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.luminiadev.bridge.network.codec.packet.handler;
2+
3+
import com.luminiadev.bridge.network.codec.packet.BridgePacket;
4+
import com.luminiadev.bridge.network.codec.packet.BridgePacketDirection;
5+
6+
/**
7+
* The handler for handling one type of packet.
8+
*
9+
* @param <T> Packet type to handle
10+
* @see TypedBridgePacketHandler
11+
*/
12+
@FunctionalInterface
13+
public interface BridgeSinglePacketHandler<T extends BridgePacket> {
14+
15+
/**
16+
* Called when a packet is sent or received by the service.
17+
*
18+
* @param packet Packet object
19+
* @param direction Packet direction (from or to service)
20+
* @param serviceId Sender's service Id
21+
*/
22+
void handle(T packet, BridgePacketDirection direction, String serviceId);
23+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.luminiadev.bridge.network.codec.packet.handler;
2+
3+
import com.luminiadev.bridge.network.codec.packet.BridgePacket;
4+
import com.luminiadev.bridge.network.codec.packet.BridgePacketDirection;
5+
6+
/**
7+
* Internal implementation of handler to handle one type of packet.
8+
*
9+
* @param <T> Packet type to handle
10+
*/
11+
public final class TypedBridgePacketHandler<T extends BridgePacket> implements BridgePacketHandler {
12+
13+
private final Class<T> packetClass;
14+
private final BridgeSinglePacketHandler<T> handler;
15+
16+
public TypedBridgePacketHandler(Class<T> packetClass, BridgeSinglePacketHandler<T> handler) {
17+
this.packetClass = packetClass;
18+
this.handler = handler;
19+
}
20+
21+
@Override
22+
public void handle(BridgePacket packet, BridgePacketDirection direction, String serviceId) {
23+
if (packetClass.isInstance(packet)) {
24+
handler.handle(packetClass.cast(packet), direction, serviceId);
25+
}
26+
}
27+
}

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ java {
1212

1313
allprojects {
1414
group = "com.luminiadev.bridge"
15-
version = "1.0.6-SNAPSHOT"
15+
version = "1.1.0-SNAPSHOT"
1616
}
1717

1818
subprojects {

0 commit comments

Comments
 (0)