Skip to content

Commit ffe2e90

Browse files
committed
refactor: packet system
1 parent c644a48 commit ffe2e90

32 files changed

+752
-862
lines changed

include/network/buffer.hpp

Lines changed: 52 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -13,74 +13,76 @@
1313
class Buffer {
1414
private:
1515
std::vector<uint8_t> _data;
16-
size_t _pos;
16+
size_t _pos;
1717

1818
public:
19+
// ============================================================
20+
// ========== CONSTRUCTEURS ==========
21+
// ============================================================
1922
Buffer();
2023
explicit Buffer(const std::vector<uint8_t>& data);
2124

22-
int readVarInt();
23-
void writeVarInt(int value);
24-
void writeInt(int32_t value);
25-
void writeIdentifierArray(const std::vector<std::string>& ids);
26-
void writeUInt(uint32_t value);
2725

26+
// ============================================================
27+
// ========== LECTURE ==========
28+
// ============================================================
29+
uint8_t readByte();
30+
bool readBool();
31+
int32_t readInt();
32+
uint16_t readUShort();
33+
uint64_t readUInt64();
34+
int32_t readVarInt();
35+
int64_t readVarInt64();
2836
std::string readString(int maxLength);
29-
std::string readString(); // Read string without max length limit
30-
void writeString(const std::string& str);
37+
std::string readString();
38+
int64_t readInt64();
3139

32-
// Array reading methods
33-
std::vector<std::string> readStringArray();
34-
std::vector<int> readVarIntArray();
35-
template <typename T> std::vector<T> readArray(std::function<T()> reader) {
40+
std::vector<std::string> readStringArray();
41+
std::vector<int> readVarIntArray();
42+
43+
template <typename T>
44+
std::vector<T> readArray(std::function<T()> reader) {
3645
int count = readVarInt();
37-
if (count < 0) {
38-
throw std::runtime_error("Negative array length");
39-
}
46+
if (count < 0) throw std::runtime_error("Negative array length");
4047
std::vector<T> result;
4148
result.reserve(count);
42-
43-
for (int i = 0; i < count; ++i) {
49+
for (int i = 0; i < count; ++i)
4450
result.push_back(reader());
45-
}
46-
4751
return result;
4852
}
4953

50-
// Boolean reading methods
51-
bool readBool();
5254

53-
std::vector<uint8_t>& getData();
54-
size_t remaining() const;
55-
uint16_t readUShort();
56-
void writeUShort(uint16_t value);
57-
uint64_t readUInt64();
58-
long readLong();
59-
int32_t readInt();
60-
void writeLong(long value);
61-
uint8_t readByte();
62-
void writeByte(uint8_t byte);
63-
void writeBytes(const std::string& data);
64-
void writeBytes(const std::vector<uint8_t>& data);
65-
void writeUUID(const UUID& uuid);
55+
// ============================================================
56+
// ========== ÉCRITURE ==========
57+
// ============================================================
58+
void writeByte(uint8_t byte);
59+
void writeBytes(const std::string& data);
60+
void writeBytes(const std::vector<uint8_t>& data);
6661

67-
void writeBool(bool value);
68-
void writeNBT(const std::string& nbtData);
69-
void writePosition(int32_t x, int32_t y, int32_t z);
70-
void writeFloat(float value);
71-
void writeDouble(double value);
72-
void writeIdentifier(const std::string& id);
73-
void writeVarLong(int64_t value);
74-
int64_t readVarLong();
62+
void writeBool(bool value);
63+
void writeInt(int32_t value);
64+
void writeUInt(uint32_t value);
65+
void writeUShort(uint16_t value);
66+
void writeInt64(int64_t value);
67+
void writeFloat(float value);
68+
void writeDouble(double value);
69+
70+
void writeVarInt(int value);
71+
void writeVarInt64(int64_t value);
7572

76-
// Known Packs packet specific methods
77-
struct KnownPack {
78-
std::string nameSpace;
79-
std::string id;
80-
std::string version;
81-
};
82-
std::vector<KnownPack> readKnownPacks();
83-
void writeKnownPacks(const std::vector<KnownPack>& packs);
73+
void writeString(const std::string& str);
74+
void writeUUID(const UUID& uuid);
75+
void writePosition(int32_t x, int32_t y, int32_t z);
76+
void writeIdentifierArray(const std::vector<std::string>& ids);
77+
void prependBytes(const std::string& data);
78+
void prependByte(uint8_t byte);
79+
void prependVarInt(int value);
80+
81+
// ============================================================
82+
// ========== UTILITAIRES ==========
83+
// ============================================================
84+
std::vector<uint8_t>& getData();
85+
size_t remaining() const;
8486
};
8587

8688
#endif

include/network/networking.hpp

Lines changed: 22 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -112,53 +112,29 @@ class NetworkManager {
112112
void handleIncomingData(int socket);
113113
};
114114

115-
void packetRouter(Packet* packet, Server& server);
116-
void handleHandshakePacket(Packet& packet, Server& server);
117-
void handleStatusPacket(Packet& packet, Server& server);
118-
void handlePingPacket(Packet& packet, Server& server);
119-
void handleClientInformation(Packet& packet, Server& server);
120-
void handleLoginStartPacket(Packet& packet, Server& server);
121-
void handleLoginAcknowledged(Packet& packet, Server& server);
122-
void handleCookieRequest(Packet& packet, Server& server);
123-
void handleFinishConfiguration(Packet& packet, Server& server);
124-
void handleAcknowledgeFinishConfiguration(Packet& packet, Server& server);
125-
void writePlayPacket(Packet& packet, Server& server);
126-
void writeSetCenterPacket(Packet& packet, Server& server);
127-
128-
// Chunk batch functions
129-
void sendChunkBatchStart(Packet& packet, Server& server);
130-
void sendChunkBatchFinished(Packet& packet, Server& server, int batchSize);
131-
void sendChunkBatchSequence(Packet& packet, Server& server);
132-
133-
// Chunk data functions
134-
void sendChunkData(Packet& packet, Server& server, int chunkX, int chunkZ);
135-
void sendPlayerPositionAndLook(Packet& packet, Server& server);
136-
void sendSpawnPosition(Packet& packet, Server& server);
137-
138-
// Spawn sequence functions
139-
void sendPlayerAbilities(Packet& packet, Server& server);
140-
void sendSetHealth(Packet& packet, Server& server);
141-
void sendSetExperience(Packet& packet, Server& server);
142-
void sendUpdateTime(Packet& packet, Server& server);
143-
void sendSetHeldItem(Packet& packet, Server& server);
144-
void handleConfirmTeleportation(Packet& packet, Server& server);
145-
void completeSpawnSequence(Packet& packet, Server& server);
146-
void sendDisconnectPacket(Packet* packet, const std::string& reason, Server& server);
147-
148-
Buffer generateEmptyChunkSections();
149-
void writeLightData(Buffer& buf, const World::ChunkData& chunkData);
150-
void writeActualLightData(Buffer& buf, const World::ChunkData& chunkData);
151-
void writeEmptyLightData(Buffer& buf);
152-
153-
void clientboundKnownPacks(Packet& packet);
154-
void serverboundKnownPacks(Packet& packet);
155-
115+
// clientbound
116+
void changeDifficultyPacket(Packet& packet);
117+
void clientboundKnownPacksPacket(Packet& packet);
156118
void gameEventPacket(Packet& packet, Server& server);
157-
void levelChunkWithLight(Packet& packet, Server& server);
119+
void handleCookieRequestPacket(Packet& packet, Server& server);
120+
void handleFinishConfigurationPacket(Packet& packet, Server& server);
121+
void handleLoginStartPacket(Packet& packet, Server& server);
122+
void handlePingPacket(Packet& packet, Server& server);
123+
void handleStatusPacket(Packet& packet, Server& server);
124+
void levelChunkWithLightPacket(Packet& packet, Server& server);
125+
void playerAbilitiesPacket(Packet& packet);
126+
void sendPlayPacket(Packet& packet, Server& server);
127+
void setHeldItemPacket(Packet& packet);
128+
void synchronizePlayerPositionPacket(Packet& packet, Server& server);
129+
130+
// serverbound
131+
void handleAcknowledgeFinishConfigurationPacket(Packet& packet, Server& server);
132+
void handleClientInformationPacket(Packet& packet, Server& server);
133+
void handleConfirmTeleportationPacket(Packet& packet, Server& server);
134+
void handleHandshakePacket(Packet& packet, Server& server);
135+
void handleLoginAcknowledgedPacket(Packet& packet, Server& server);
136+
void serverboundKnownPacksPacket(Packet& packet);
158137

159-
// Optional Packets
160-
void changeDifficulty(Packet& packet);
161-
void playerAbilities(Packet& packet);
162-
void setHeldItem(Packet& packet);
138+
void packetRouter(Packet* packet, Server& server);
163139

164140
#endif

include/network/packet.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ class Packet {
4141
int getVarintSize(int32_t value);
4242
void setPacketSize(int32_t value);
4343
void setPacketId(uint32_t value);
44+
void sendPacket(int id, Buffer& data, Server& server, bool last);
4445
};
4546

4647
#endif

src/data/RegistryData.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,17 +48,17 @@ std::vector<uint8_t> RegistryData::serialize() const {
4848
Buffer buffer;
4949

5050
// Format MC 1.21.5: id + entries length + entries array
51-
buffer.writeIdentifier(_registry_id);
51+
buffer.writeString(_registry_id);
5252
buffer.writeVarInt(static_cast<int32_t>(_entries.size()));
5353

5454
for (const auto& entry : _entries) {
5555
// Chaque entrée: key (string) + value optional (anonymousNbt)
56-
buffer.writeIdentifier(entry.entry_id);
56+
buffer.writeString(entry.entry_id);
5757

5858
// Format "value optional": boolean présent + données NBT si présent
5959
if (entry.has_data && entry.data.has_value()) {
6060
buffer.writeBool(true); // Données présentes
61-
buffer.writeNBT("{}"); // Données NBT (vide pour l'instant)
61+
buffer.writeBytes("{}"); // Données NBT (vide pour l'instant)
6262
} else {
6363
buffer.writeBool(false); // Pas de données NBT optionnelles
6464
}

0 commit comments

Comments
 (0)