Skip to content

Commit c277dc7

Browse files
committed
Packets are now compressed using zlib. Legacy and unused UDP code removed.
1 parent 05a652b commit c277dc7

23 files changed

+277
-191
lines changed

.gitmodules

+4
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,7 @@
99
[submodule "external/gamekit"]
1010
path = external/gamekit
1111
url = git://github.com/Unarelith/GameKit.git
12+
[submodule "external/zlib"]
13+
path = external/zlib
14+
url = git://github.com/Unarelith/zlib.git
15+
ignore = dirty

CMakeLists.txt

+6
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,12 @@ set(BUILD_SHARED_LIBS OFF)
201201

202202
add_subdirectory(external/SFML)
203203

204+
#------------------------------------------------------------------------------
205+
# - zlib
206+
#------------------------------------------------------------------------------
207+
add_subdirectory(external/zlib)
208+
include_directories(external/zlib)
209+
204210
#------------------------------------------------------------------------------
205211
# Subdirectories
206212
#------------------------------------------------------------------------------

external/zlib

Submodule zlib added at 9c92069

source/client/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -61,5 +61,6 @@ target_link_libraries(${PROJECT_NAME}
6161
${LUA_LIBRARIES}
6262
sfml-system
6363
sfml-network
64+
zlib
6465
${UNIX_LIBS})
6566

source/client/network/Client.cpp

+14-35
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,11 @@ void Client::connect(sf::IpAddress serverAddress, u16 serverPort) {
4242
if (m_socket.bind(0) != sf::Socket::Done)
4343
throw ClientConnectException("Network error: Bind failed");
4444

45-
sf::Packet packet;
45+
Network::Packet packet;
4646
packet << Network::Command::ClientConnect << sf::IpAddress::getLocalAddress().toString() << m_socket.getLocalPort();
4747
m_tcpSocket->send(packet);
4848

49-
sf::Packet answer;
49+
Network::Packet answer;
5050
m_tcpSocket->receive(answer);
5151

5252
Network::Command command;
@@ -69,52 +69,31 @@ void Client::connect(sf::IpAddress serverAddress, u16 serverPort) {
6969
}
7070

7171
void Client::disconnect() {
72-
sf::Packet packet;
72+
Network::Packet packet;
7373
packet << Network::Command::ClientDisconnect;
7474
m_tcpSocket->send(packet);
7575

7676
m_tcpSocket->disconnect();
7777
}
7878

79-
void Client::send(sf::Packet &packet) {
79+
void Client::send(Network::Packet &packet) {
8080
if (m_tcpSocket)
8181
m_tcpSocket->send(packet);
8282
else
8383
throw EXCEPTION("Network error: Trying to send a packet without being connected");
8484
}
8585

86-
void Client::sendKeyState() {
87-
if (!m_keyUpdateTimer.isStarted())
88-
m_keyUpdateTimer.start();
89-
90-
if (m_keyUpdateTimer.time() > 15) {
91-
gk::InputHandler *inputHandler = gk::GamePad::getInputHandler();
92-
if (inputHandler) {
93-
sf::Packet packet;
94-
packet << Network::Command::KeyState << gk::GameClock::getInstance().getTicks() << m_id;
95-
for (auto &it : inputHandler->keysPressed()) {
96-
packet << static_cast<u8>(it.first) << it.second;
97-
}
98-
99-
m_socket.send(packet, m_serverAddress, m_serverPort);
100-
}
101-
102-
m_keyUpdateTimer.reset();
103-
m_keyUpdateTimer.start();
104-
}
105-
}
106-
10786
void Client::update() {
108-
sf::Packet packet;
109-
sf::IpAddress senderAddress;
110-
u16 senderPort;
111-
while (m_socket.receive(packet, senderAddress, senderPort) == sf::Socket::Done) {
112-
Network::Command command;
113-
packet >> command;
114-
115-
// gkDebug() << "UDP Message of type" << Network::commandToString(command) << "received from:" << senderAddress << ":" << senderPort;
116-
}
117-
87+
// sf::IpAddress senderAddress;
88+
// u16 senderPort;
89+
// while (m_socket.receive(packet, senderAddress, senderPort) == sf::Socket::Done) {
90+
// Network::Command command;
91+
// packet >> command;
92+
//
93+
// // gkDebug() << "UDP Message of type" << Network::commandToString(command) << "received from:" << senderAddress << ":" << senderPort;
94+
// }
95+
96+
Network::Packet packet;
11897
while (m_tcpSocket->receive(packet) == sf::Socket::Done) {
11998
Network::Command command;
12099
packet >> command;

source/client/network/Client.hpp

+2-3
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,13 @@ class ClientConnectException {
5353
};
5454

5555
class Client {
56-
using CommandCallback = std::function<void(sf::Packet &packet)>;
56+
using CommandCallback = std::function<void(Network::Packet &packet)>;
5757

5858
public:
5959
void connect(sf::IpAddress serverAddress, u16 serverPort);
6060
void disconnect();
6161

62-
void send(sf::Packet &packet);
63-
void sendKeyState();
62+
void send(Network::Packet &packet);
6463

6564
void update();
6665

source/client/network/ClientCommandHandler.cpp

+27-27
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
#include "Registry.hpp"
4444

4545
void ClientCommandHandler::sendPlayerInvUpdate() {
46-
sf::Packet invPacket;
46+
Network::Packet invPacket;
4747
invPacket << Network::Command::PlayerInvUpdate;
4848
// FIXME: Sending client id shouldn't be necessary
4949
invPacket << m_client.id();
@@ -52,7 +52,7 @@ void ClientCommandHandler::sendPlayerInvUpdate() {
5252
}
5353

5454
void ClientCommandHandler::sendPlayerPosUpdate() {
55-
sf::Packet packet;
55+
Network::Packet packet;
5656
packet << Network::Command::PlayerPosUpdate;
5757
// FIXME: Sending client id shouldn't be necessary
5858
packet << m_client.id();
@@ -64,7 +64,7 @@ void ClientCommandHandler::sendPlayerPosUpdate() {
6464
}
6565

6666
void ClientCommandHandler::sendPlayerDigBlock(const glm::ivec4 &selectedBlock) {
67-
sf::Packet packet;
67+
Network::Packet packet;
6868
packet << Network::Command::PlayerDigBlock
6969
<< s32(selectedBlock.x)
7070
<< s32(selectedBlock.y)
@@ -73,27 +73,27 @@ void ClientCommandHandler::sendPlayerDigBlock(const glm::ivec4 &selectedBlock) {
7373
}
7474

7575
void ClientCommandHandler::sendPlayerPlaceBlock(s32 x, s32 y, s32 z, u32 block) {
76-
sf::Packet packet;
76+
Network::Packet packet;
7777
packet << Network::Command::PlayerPlaceBlock << x << y << z << block;
7878
m_client.send(packet);
7979
}
8080

8181
void ClientCommandHandler::sendPlayerInventoryRequest() {
82-
sf::Packet packet;
82+
Network::Packet packet;
8383
packet << Network::Command::PlayerInventory
8484
<< u16(Config::screenWidth) << u16(Config::screenHeight) << u8(Config::guiScale);
8585
m_client.send(packet);
8686
}
8787

8888
void ClientCommandHandler::sendPlayerCreativeWindowRequest() {
89-
sf::Packet packet;
89+
Network::Packet packet;
9090
packet << Network::Command::PlayerCreativeWindow
9191
<< u16(Config::screenWidth) << u16(Config::screenHeight) << u8(Config::guiScale);
9292
m_client.send(packet);
9393
}
9494

9595
void ClientCommandHandler::sendBlockActivated(const glm::ivec4 &selectedBlock) {
96-
sf::Packet packet;
96+
Network::Packet packet;
9797
packet << Network::Command::BlockActivated
9898
<< s32(selectedBlock.x)
9999
<< s32(selectedBlock.y)
@@ -103,22 +103,22 @@ void ClientCommandHandler::sendBlockActivated(const glm::ivec4 &selectedBlock) {
103103
}
104104

105105
void ClientCommandHandler::sendBlockInvUpdate(Inventory &inventory) {
106-
sf::Packet packet;
106+
Network::Packet packet;
107107
packet << Network::Command::BlockInvUpdate;
108108
packet << s32(inventory.blockPos().x) << s32(inventory.blockPos().y) << s32(inventory.blockPos().z);
109109
packet << inventory;
110110
m_client.send(packet);
111111
}
112112

113113
void ClientCommandHandler::sendChunkRequest(s32 chunkX, s32 chunkY, s32 chunkZ) {
114-
sf::Packet packet;
114+
Network::Packet packet;
115115
packet << Network::Command::ChunkRequest;
116116
packet << chunkX << chunkY << chunkZ;
117117
m_client.send(packet);
118118
}
119119

120120
void ClientCommandHandler::sendChatMessage(const std::string &message) {
121-
sf::Packet packet;
121+
Network::Packet packet;
122122
packet << Network::Command::ChatMessage;
123123
// FIXME: Sending client id shouldn't be necessary
124124
packet << m_client.id();
@@ -127,7 +127,7 @@ void ClientCommandHandler::sendChatMessage(const std::string &message) {
127127
}
128128

129129
void ClientCommandHandler::setupCallbacks() {
130-
m_client.setCommandCallback(Network::Command::ClientDisconnect, [this](sf::Packet &packet) {
130+
m_client.setCommandCallback(Network::Command::ClientDisconnect, [this](Network::Packet &packet) {
131131
u16 clientID;
132132
packet >> clientID;
133133

@@ -136,27 +136,27 @@ void ClientCommandHandler::setupCallbacks() {
136136
m_playerBoxes.erase(it);
137137
});
138138

139-
m_client.setCommandCallback(Network::Command::RegistryData, [this](sf::Packet &packet) {
139+
m_client.setCommandCallback(Network::Command::RegistryData, [this](Network::Packet &packet) {
140140
// FIXME: This is a quick fix for concurrency between client and server in singleplayer
141141
if (!m_isSingleplayer)
142142
Registry::getInstance().deserialize(packet);
143143

144144
m_isRegistryInitialized = true;
145145
});
146146

147-
m_client.setCommandCallback(Network::Command::ChunkData, [this](sf::Packet &packet) {
147+
m_client.setCommandCallback(Network::Command::ChunkData, [this](Network::Packet &packet) {
148148
m_world.receiveChunkData(packet);
149149
});
150150

151-
m_client.setCommandCallback(Network::Command::BlockUpdate, [this](sf::Packet &packet) {
151+
m_client.setCommandCallback(Network::Command::BlockUpdate, [this](Network::Packet &packet) {
152152
s32 x, y, z;
153153
u32 block;
154154
packet >> x >> y >> z >> block;
155155
m_world.setBlock(x, y, z, block);
156156
m_world.setData(x, y, z, block >> 16);
157157
});
158158

159-
m_client.setCommandCallback(Network::Command::PlayerInvUpdate, [this](sf::Packet &packet) {
159+
m_client.setCommandCallback(Network::Command::PlayerInvUpdate, [this](Network::Packet &packet) {
160160
u16 clientId;
161161
packet >> clientId;
162162

@@ -166,7 +166,7 @@ void ClientCommandHandler::setupCallbacks() {
166166
packet >> m_playerBoxes.at(clientId).inventory();
167167
});
168168

169-
m_client.setCommandCallback(Network::Command::PlayerPosUpdate, [this](sf::Packet &packet) {
169+
m_client.setCommandCallback(Network::Command::PlayerPosUpdate, [this](Network::Packet &packet) {
170170
double x, y, z;
171171
u16 clientId;
172172
bool isTeleportation;
@@ -184,7 +184,7 @@ void ClientCommandHandler::setupCallbacks() {
184184
}
185185
});
186186

187-
m_client.setCommandCallback(Network::Command::PlayerSpawn, [this](sf::Packet &packet) {
187+
m_client.setCommandCallback(Network::Command::PlayerSpawn, [this](Network::Packet &packet) {
188188
u16 clientId;
189189
gk::Vector3d pos;
190190
packet >> clientId >> pos.x >> pos.y >> pos.z;
@@ -199,7 +199,7 @@ void ClientCommandHandler::setupCallbacks() {
199199
}
200200
});
201201

202-
m_client.setCommandCallback(Network::Command::PlayerChangeDimension, [this](sf::Packet &packet) {
202+
m_client.setCommandCallback(Network::Command::PlayerChangeDimension, [this](Network::Packet &packet) {
203203
u16 clientId, dimension;
204204
s32 x, y, z;
205205
packet >> clientId >> x >> y >> z >> dimension;
@@ -213,11 +213,11 @@ void ClientCommandHandler::setupCallbacks() {
213213
}
214214
});
215215

216-
m_client.setCommandCallback(Network::Command::BlockGUIData, [this](sf::Packet &packet) {
216+
m_client.setCommandCallback(Network::Command::BlockGUIData, [this](Network::Packet &packet) {
217217
gk::ApplicationStateStack::getInstance().push<LuaGUIState>(*this, m_player, m_world, packet, &gk::ApplicationStateStack::getInstance().top());
218218
});
219219

220-
m_client.setCommandCallback(Network::Command::BlockInvUpdate, [this](sf::Packet &packet) {
220+
m_client.setCommandCallback(Network::Command::BlockInvUpdate, [this](Network::Packet &packet) {
221221
gk::Vector3<s32> pos;
222222
packet >> pos.x >> pos.y >> pos.z;
223223

@@ -229,7 +229,7 @@ void ClientCommandHandler::setupCallbacks() {
229229
packet >> data->inventory;
230230
});
231231

232-
m_client.setCommandCallback(Network::Command::BlockDataUpdate, [this](sf::Packet &packet) {
232+
m_client.setCommandCallback(Network::Command::BlockDataUpdate, [this](Network::Packet &packet) {
233233
gk::Vector3<s32> pos;
234234
packet >> pos.x >> pos.y >> pos.z;
235235

@@ -251,7 +251,7 @@ void ClientCommandHandler::setupCallbacks() {
251251
}
252252
});
253253

254-
m_client.setCommandCallback(Network::Command::EntitySpawn, [this](sf::Packet &packet) {
254+
m_client.setCommandCallback(Network::Command::EntitySpawn, [this](Network::Packet &packet) {
255255
entt::entity entityID;
256256
packet >> entityID;
257257

@@ -268,7 +268,7 @@ void ClientCommandHandler::setupCallbacks() {
268268
}
269269
});
270270

271-
m_client.setCommandCallback(Network::Command::EntityDespawn, [this](sf::Packet &packet) {
271+
m_client.setCommandCallback(Network::Command::EntityDespawn, [this](Network::Packet &packet) {
272272
entt::entity entityID;
273273
packet >> entityID;
274274

@@ -280,7 +280,7 @@ void ClientCommandHandler::setupCallbacks() {
280280
gkError() << "EntityDespawn: Entity ID" << std::underlying_type_t<entt::entity>(entityID) << "is invalid";
281281
});
282282

283-
m_client.setCommandCallback(Network::Command::EntityPosition, [this](sf::Packet &packet) {
283+
m_client.setCommandCallback(Network::Command::EntityPosition, [this](Network::Packet &packet) {
284284
entt::entity entityID;
285285
packet >> entityID;
286286

@@ -293,7 +293,7 @@ void ClientCommandHandler::setupCallbacks() {
293293
gkError() << "EntityPosition: Entity ID" << std::underlying_type_t<entt::entity>(entityID) << "is invalid";
294294
});
295295

296-
m_client.setCommandCallback(Network::Command::EntityRotation, [this](sf::Packet &packet) {
296+
m_client.setCommandCallback(Network::Command::EntityRotation, [this](Network::Packet &packet) {
297297
entt::entity entityID;
298298
packet >> entityID;
299299

@@ -309,7 +309,7 @@ void ClientCommandHandler::setupCallbacks() {
309309
gkError() << "EntityRotation: Entity ID" << std::underlying_type_t<entt::entity>(entityID) << "is invalid";
310310
});
311311

312-
m_client.setCommandCallback(Network::Command::EntityAnimation, [this](sf::Packet &packet) {
312+
m_client.setCommandCallback(Network::Command::EntityAnimation, [this](Network::Packet &packet) {
313313
entt::entity entityID;
314314
packet >> entityID;
315315

@@ -322,7 +322,7 @@ void ClientCommandHandler::setupCallbacks() {
322322
gkError() << "EntityAnimation: Entity ID" << std::underlying_type_t<entt::entity>(entityID) << "is invalid";
323323
});
324324

325-
m_client.setCommandCallback(Network::Command::EntityDrawableDef, [this](sf::Packet &packet) {
325+
m_client.setCommandCallback(Network::Command::EntityDrawableDef, [this](Network::Packet &packet) {
326326
entt::entity entityID;
327327
packet >> entityID;
328328

source/client/world/ClientWorld.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ void ClientWorld::updateSky(u16 dimensionID) {
114114
m_sky = &sky;
115115
}
116116

117-
void ClientWorld::receiveChunkData(sf::Packet &packet) {
117+
void ClientWorld::receiveChunkData(Network::Packet &packet) {
118118
s32 cx, cy, cz;
119119
packet >> cx >> cy >> cz;
120120

source/client/world/ClientWorld.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class ClientWorld : public World, public gk::Drawable {
5555

5656
void updateSky(u16 dimensionID);
5757

58-
void receiveChunkData(sf::Packet &packet);
58+
void receiveChunkData(Network::Packet &packet);
5959
void removeChunk(ChunkMap::iterator &it);
6060

6161
Chunk *getChunk(int cx, int cy, int cz) const override;

source/common/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ endforeach(HEADER_FILE)
1818
# Add library
1919
#------------------------------------------------------------------------------
2020
add_library(${PROJECT_NAME} STATIC ${SOURCE_FILES})
21-
add_dependencies(${PROJECT_NAME} EnTT sfml-network gamekit)
21+
add_dependencies(${PROJECT_NAME} zlib EnTT sfml-network gamekit)
2222

2323
#------------------------------------------------------------------------------
2424
# Compiler flags
@@ -35,5 +35,5 @@ target_compile_options(${PROJECT_NAME} PRIVATE -DSOL_CHECK_ARGUMENTS -DSOL_PRINT
3535

3636
# target_compile_options(${PROJECT_NAME} PRIVATE -pg)
3737

38-
target_link_libraries(${PROJECT_NAME} sfml-system sfml-network)
38+
target_link_libraries(${PROJECT_NAME} sfml-system sfml-network zlib)
3939

0 commit comments

Comments
 (0)