Skip to content

Commit d242ff3

Browse files
authored
Merge pull request #4 from LuminiaDev/feature/unknown-packet
feat: added support for unknown packets
2 parents 475c768 + 0ad3db7 commit d242ff3

File tree

4 files changed

+60
-7
lines changed

4 files changed

+60
-7
lines changed

bridge-common/src/main/java/com/luminiadev/bridge/network/codec/BridgeCodec.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.luminiadev.bridge.network.codec.packet.BridgePacket;
55
import com.luminiadev.bridge.network.codec.packet.BridgePacketDefinition;
66
import com.luminiadev.bridge.network.codec.packet.BridgePacketFactory;
7+
import com.luminiadev.bridge.network.codec.packet.BridgeUnknownPacket;
78
import com.luminiadev.bridge.network.codec.packet.serializer.BridgePacketSerializer;
89
import com.luminiadev.bridge.util.ByteBuffer;
910
import org.jetbrains.annotations.Nullable;
@@ -47,7 +48,7 @@ public void unregisterPacket(String packetId) {
4748
}
4849
}
4950

50-
@SuppressWarnings("unchecked")
51+
@SuppressWarnings({"unchecked", "rawtypes"})
5152
public BridgePacket tryDecode(ByteBuffer buffer, String packetId) {
5253
BridgePacketDefinition<? extends BridgePacket> definition = this.getPacketDefinition(packetId);
5354

@@ -57,7 +58,11 @@ public BridgePacket tryDecode(ByteBuffer buffer, String packetId) {
5758
packet = definition.getFactory().create();
5859
serializer = (BridgePacketSerializer<BridgePacket>) definition.getSerializer();
5960
} else {
60-
throw new BridgeCodecException("Definition for packet with id " + packetId + " not found");
61+
BridgeUnknownPacket unknownPacket = new BridgeUnknownPacket();
62+
unknownPacket.setOriginalId(packetId);
63+
unknownPacket.setOriginalPayload(buffer);
64+
packet = unknownPacket;
65+
serializer = (BridgePacketSerializer) new BridgeUnknownPacket.BridgeUnknownPacketSerializer();
6166
}
6267

6368
serializer.deserialize(buffer, packet);
@@ -66,11 +71,16 @@ public BridgePacket tryDecode(ByteBuffer buffer, String packetId) {
6671

6772
@SuppressWarnings("unchecked")
6873
public <T extends BridgePacket> void tryEncode(ByteBuffer buffer, T packet) {
69-
BridgePacketDefinition<T> definition = (BridgePacketDefinition<T>) this.getPacketDefinition(packet.getId());
70-
if (definition == null) {
71-
throw new BridgeCodecException("Definition for packet with id " + packet.getId() + " not found");
74+
BridgePacketSerializer<T> serializer;
75+
if (packet instanceof BridgeUnknownPacket) {
76+
serializer = (BridgePacketSerializer<T>) new BridgeUnknownPacket.BridgeUnknownPacketSerializer();
77+
} else {
78+
BridgePacketDefinition<T> definition = (BridgePacketDefinition<T>) this.getPacketDefinition(packet.getId());
79+
if (definition == null) {
80+
throw new BridgeCodecException("Definition for packet with id " + packet.getId() + " not found");
81+
}
82+
serializer = definition.getSerializer();
7283
}
73-
BridgePacketSerializer<T> serializer = definition.getSerializer();
7484
serializer.serialize(buffer, packet);
7585
}
7686

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.luminiadev.bridge.network.codec.packet;
2+
3+
import com.luminiadev.bridge.network.codec.packet.serializer.BridgePacketSerializer;
4+
import com.luminiadev.bridge.util.ByteBuffer;
5+
import org.jetbrains.annotations.NotNull;
6+
import lombok.Data;
7+
import lombok.EqualsAndHashCode;
8+
9+
@Data
10+
@EqualsAndHashCode(doNotUseGetters = true)
11+
public final class BridgeUnknownPacket implements BridgePacket {
12+
13+
private String originalId;
14+
private ByteBuffer originalPayload;
15+
16+
@Override
17+
public @NotNull String getId() {
18+
return "unknown";
19+
}
20+
21+
public static final class BridgeUnknownPacketSerializer implements BridgePacketSerializer<BridgeUnknownPacket> {
22+
23+
@Override
24+
public void serialize(ByteBuffer buffer, BridgeUnknownPacket packet) {
25+
buffer.writeString(packet.getOriginalId());
26+
buffer.writeBytes(
27+
packet.getOriginalPayload().byteBuf(),
28+
packet.getOriginalPayload().readerIndex(),
29+
packet.getOriginalPayload().readableBytes()
30+
);
31+
}
32+
33+
@Override
34+
public void deserialize(ByteBuffer buffer, BridgeUnknownPacket packet) {
35+
packet.setOriginalId(buffer.readString());
36+
packet.setOriginalPayload(ByteBuffer.of(buffer.readRetainedSlice(buffer.readableBytes())));
37+
}
38+
}
39+
}

bridge-common/src/main/java/com/luminiadev/bridge/util/ByteBuffer.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ public static ByteBuffer of(ByteBuf buffer) {
2727
return new ByteBuffer(buffer);
2828
}
2929

30+
public ByteBuf byteBuf() {
31+
return buffer;
32+
}
33+
3034
public String readString() {
3135
int length = this.readUnsignedVarInt();
3236
return (String) buffer.readCharSequence(length, StandardCharsets.UTF_8);

build.gradle.kts

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

1212
allprojects {
1313
group = "com.luminia"
14-
version = "1.0.3-SNAPSHOT"
14+
version = "1.0.4-SNAPSHOT"
1515
}
1616

1717
subprojects {

0 commit comments

Comments
 (0)