Skip to content

Commit 563eb1a

Browse files
committed
Merge remote-tracking branch 'origin/refactor-network' into windows/port-networking
2 parents 77e396a + 07c20d9 commit 563eb1a

52 files changed

Lines changed: 816 additions & 1848 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

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: 0 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -112,53 +112,4 @@ 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-
156-
void gameEventPacket(Packet& packet, Server& server);
157-
void levelChunkWithLight(Packet& packet, Server& server);
158-
159-
// Optional Packets
160-
void changeDifficulty(Packet& packet);
161-
void playerAbilities(Packet& packet);
162-
void setHeldItem(Packet& packet);
163-
164115
#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

include/network/packetRouter.hpp

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#ifndef PACKET_ROUTER_HPP
2+
# define PACKET_ROUTER_HPP
3+
4+
# include "packet.hpp"
5+
# include "server.hpp"
6+
7+
// clientbound
8+
void changeDifficultyPacket(Packet& packet, Server& server);
9+
void clientboundKnownPacksPacket(Packet& packet, Server& server);
10+
void gameEventPacket(Packet& packet, Server& server);
11+
void handleCookieRequestPacket(Packet& packet, Server& server);
12+
void handleFinishConfigurationPacket(Packet& packet, Server& server);
13+
void handleLoginStartPacket(Packet& packet, Server& server);
14+
void handlePingPacket(Packet& packet, Server& server);
15+
void handleStatusPacket(Packet& packet, Server& server);
16+
void levelChunkWithLightPacket(Packet& packet, Server& server);
17+
void playerAbilitiesPacket(Packet& packet, Server& server);
18+
void sendPlayPacket(Packet& packet, Server& server);
19+
void setHeldItemPacket(Packet& packet, Server& server);
20+
void synchronizePlayerPositionPacket(Packet& packet, Server& server);
21+
void setCenterPacket(Packet& packet, Server& server);
22+
23+
// serverbound
24+
void handleAcknowledgeFinishConfigurationPacket(Packet& packet, Server& server);
25+
void handleClientInformationPacket(Packet& packet, Server& server);
26+
void handleConfirmTeleportationPacket(Packet& packet, Server& server);
27+
void handleHandshakePacket(Packet& packet, Server& server);
28+
void handleLoginAcknowledgedPacket(Packet& packet, Server& server);
29+
void serverboundKnownPacksPacket(Packet& packet);
30+
31+
void packetRouter(Packet* packet, Server& server);
32+
33+
void handleHandshakeState(Packet* packet, Server& server);
34+
void handleStatusState(Packet* packet, Server& server);
35+
void handleLoginState(Packet* packet, Server& server);
36+
void handleConfigurationState(Packet* packet, Server& server);
37+
void handlePlayState(Packet* packet, Server& server);
38+
void sendRegistryData(Packet& packet, Server& server);
39+
void sendUpdateTags(Packet& packet, Server& server);
40+
41+
#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
}

src/data/RegistryDataUtils.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
#include "RegistryDataUtils.hpp"
1+
#include "data/RegistryDataUtils.hpp"
22

3-
#include "RegistryData.hpp"
4-
#include "RegistryIds.hpp"
3+
#include "data/RegistryData.hpp"
4+
#include "data/RegistryIds.hpp"
55
#include "logger.hpp"
6-
#include "minecraftRegistries.hpp"
6+
#include "data/minecraftRegistries.hpp"
77
#include "network/buffer.hpp"
88
#include "network/networking.hpp"
99

src/data/updateTags.cpp

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -55,25 +55,12 @@ void sendUpdateTags(Packet& packet, Server& server) {
5555
"Configuration");
5656
}
5757

58-
Buffer finalBuf;
59-
int packetId = 0x0D;
60-
int packetIdSize = packet.getVarintSize(packetId);
61-
int totalPayloadSize = packetIdSize + tagBuffer.getData().size();
62-
63-
finalBuf.writeVarInt(totalPayloadSize);
64-
finalBuf.writeVarInt(packetId);
65-
finalBuf.writeBytes(tagBuffer.getData());
66-
67-
Packet* tagsPacket = new Packet(packet);
68-
tagsPacket->getData() = finalBuf;
69-
tagsPacket->setPacketSize(finalBuf.getData().size());
70-
tagsPacket->setReturnPacket(PACKET_SEND);
71-
72-
outgoingPackets->push(tagsPacket);
58+
Packet* tagsPacket = new Packet(packet);
59+
tagsPacket->sendPacket(0x0D, tagBuffer, server, true);
7360

7461
g_logger->logNetwork(INFO,
7562
"Update Tags packet sent: " + std::to_string(totalRegistries) + " registries, " + std::to_string(totalTags) + " tags, " +
76-
std::to_string(totalEntries) + " entries, packet size: " + std::to_string(finalBuf.getData().size()) + " bytes",
63+
std::to_string(totalEntries) + " entries",
7764
"Configuration");
7865

7966
packet.setReturnPacket(PACKET_OK);

0 commit comments

Comments
 (0)