Implemented a macro for the serial buffer size
This commit is contained in:
@@ -68,7 +68,7 @@ void ClientApplication::Init() {
|
||||
if (SDLNet_Init()) {
|
||||
throw(std::runtime_error("Failed to initialize SDL_net"));
|
||||
}
|
||||
network.Open(0, sizeof(NetworkPacket));
|
||||
network.Open(0, PACKET_BUFFER_SIZE);
|
||||
}
|
||||
|
||||
void ClientApplication::Proc() {
|
||||
|
||||
@@ -65,14 +65,14 @@ InWorld::InWorld(ConfigUtility* const argConfig, UDPNetworkUtility* const argNet
|
||||
packet.playerInfo.motion = {0,0};
|
||||
|
||||
//send it
|
||||
char buffer[sizeof(NetworkPacket)];
|
||||
char buffer[PACKET_BUFFER_SIZE];
|
||||
serialize(&packet, buffer);
|
||||
network.Send(Channels::SERVER, buffer, sizeof(NetworkPacket));
|
||||
network.Send(Channels::SERVER, buffer, PACKET_BUFFER_SIZE);
|
||||
|
||||
//request a sync
|
||||
packet.meta.type = NetworkPacket::Type::SYNCHRONIZE;
|
||||
serialize(&packet, buffer);
|
||||
network.Send(Channels::SERVER, buffer, sizeof(NetworkPacket));
|
||||
network.Send(Channels::SERVER, buffer, PACKET_BUFFER_SIZE);
|
||||
}
|
||||
|
||||
InWorld::~InWorld() {
|
||||
@@ -290,7 +290,7 @@ void InWorld::HandlePlayerUpdate(NetworkPacket packet) {
|
||||
|
||||
void InWorld::SendState() {
|
||||
NetworkPacket packet;
|
||||
char buffer[sizeof(NetworkPacket)];
|
||||
char buffer[PACKET_BUFFER_SIZE];
|
||||
|
||||
//pack the packet
|
||||
packet.meta.type = NetworkPacket::Type::PLAYER_UPDATE;
|
||||
@@ -302,27 +302,27 @@ void InWorld::SendState() {
|
||||
packet.playerInfo.motion = localCharacter->GetMotion();
|
||||
|
||||
serialize(&packet, buffer);
|
||||
network.Send(Channels::SERVER, buffer, sizeof(NetworkPacket));
|
||||
network.Send(Channels::SERVER, buffer, PACKET_BUFFER_SIZE);
|
||||
}
|
||||
|
||||
void InWorld::RequestDisconnect() {
|
||||
NetworkPacket packet;
|
||||
char buffer[sizeof(NetworkPacket)];
|
||||
char buffer[PACKET_BUFFER_SIZE];
|
||||
|
||||
//send a disconnect request
|
||||
packet.meta.type = NetworkPacket::Type::DISCONNECT;
|
||||
packet.clientInfo.index = clientIndex;
|
||||
serialize(&packet, buffer);
|
||||
network.Send(Channels::SERVER, buffer, sizeof(NetworkPacket));
|
||||
network.Send(Channels::SERVER, buffer, PACKET_BUFFER_SIZE);
|
||||
}
|
||||
|
||||
void InWorld::RequestShutDown() {
|
||||
NetworkPacket packet;
|
||||
char buffer[sizeof(NetworkPacket)];
|
||||
char buffer[PACKET_BUFFER_SIZE];
|
||||
|
||||
//send a shutdown request
|
||||
packet.meta.type = NetworkPacket::Type::SHUTDOWN;
|
||||
packet.clientInfo.index = clientIndex;
|
||||
serialize(&packet, buffer);
|
||||
network.Send(Channels::SERVER, buffer, sizeof(NetworkPacket));
|
||||
network.Send(Channels::SERVER, buffer, PACKET_BUFFER_SIZE);
|
||||
}
|
||||
@@ -127,12 +127,12 @@ void LobbyMenu::MouseButtonUp(SDL_MouseButtonEvent const& button) {
|
||||
if (search.MouseButtonUp(button) == Button::State::HOVER) {
|
||||
//the vars
|
||||
NetworkPacket packet;
|
||||
char buffer[sizeof(NetworkPacket)];
|
||||
char buffer[PACKET_BUFFER_SIZE];
|
||||
|
||||
//broadcast to the network, or a specific server
|
||||
packet.meta.type = NetworkPacket::Type::BROADCAST_REQUEST;
|
||||
serialize(&packet, buffer);
|
||||
network.Send(config["server.host"].c_str(), config.Int("server.port"), buffer, sizeof(NetworkPacket));
|
||||
network.Send(config["server.host"].c_str(), config.Int("server.port"), buffer, PACKET_BUFFER_SIZE);
|
||||
|
||||
//reset the server list
|
||||
serverInfo.clear();
|
||||
@@ -142,12 +142,12 @@ void LobbyMenu::MouseButtonUp(SDL_MouseButtonEvent const& button) {
|
||||
else if (join.MouseButtonUp(button) == Button::State::HOVER && selection != nullptr) {
|
||||
//the vars
|
||||
NetworkPacket packet;
|
||||
char buffer[sizeof(NetworkPacket)];
|
||||
char buffer[PACKET_BUFFER_SIZE];
|
||||
|
||||
//join the selected server
|
||||
packet.meta.type = NetworkPacket::Type::JOIN_REQUEST;
|
||||
serialize(&packet, buffer);
|
||||
network.Send(&selection->address, buffer, sizeof(NetworkPacket));
|
||||
network.Send(&selection->address, buffer, PACKET_BUFFER_SIZE);
|
||||
selection = nullptr;
|
||||
}
|
||||
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
|
||||
#include "SDL/SDL_net.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
#define PACKET_STRING_SIZE 100
|
||||
|
||||
#pragma pack(push, 0)
|
||||
@@ -114,4 +116,6 @@ union NetworkPacket {
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
#define PACKET_BUFFER_SIZE std::max(sizeof(NetworkPacket), REGION_WIDTH * REGION_HEIGHT * REGION_DEPTH * sizeof(Region::type_t) + sizeof(NetworkPacket::Metadata))
|
||||
|
||||
#endif
|
||||
|
||||
@@ -76,6 +76,14 @@ void serializePlayer(NetworkPacket* packet, char* buffer) {
|
||||
memcpy(buffer, &packet->playerInfo.motion.y, sizeof(double));
|
||||
}
|
||||
|
||||
void serializeRegion(NetworkPacket* packet, char* buffer) {
|
||||
// cout << "serializeRegion" << endl;
|
||||
memcpy(buffer, &packet->meta.type, sizeof(NetworkPacket::Type));
|
||||
buffer += sizeof(NetworkPacket::Type);
|
||||
|
||||
//TODO
|
||||
}
|
||||
|
||||
//-------------------------
|
||||
//internal deserialization functions
|
||||
//-------------------------
|
||||
@@ -126,6 +134,14 @@ void deserializePlayer(NetworkPacket* packet, char* buffer) {
|
||||
memcpy(&packet->playerInfo.motion.y, buffer, sizeof(double));
|
||||
}
|
||||
|
||||
void deserializeRegion(NetworkPacket* packet, char* buffer) {
|
||||
// cout << "deserializeRegion" << endl;
|
||||
memcpy(&packet->meta.type, buffer, sizeof(NetworkPacket::Type));
|
||||
buffer += sizeof(NetworkPacket::Type);
|
||||
|
||||
//TODO
|
||||
}
|
||||
|
||||
//-------------------------
|
||||
//the interface functions
|
||||
//-------------------------
|
||||
@@ -160,6 +176,11 @@ void serialize(NetworkPacket* packet, void* buffer) {
|
||||
case NetworkPacket::Type::PLAYER_UPDATE:
|
||||
serializePlayer(packet, reinterpret_cast<char*>(buffer));
|
||||
break;
|
||||
|
||||
//map info
|
||||
case NetworkPacket::Type::REGION_CONTENT:
|
||||
serializeRegion(packet, reinterpret_cast<char*>(buffer));
|
||||
break;
|
||||
}
|
||||
// for (int i = 0; i < sizeof(NetworkPacket); i++) {
|
||||
// cout << ((char*)(buffer))[i];
|
||||
@@ -199,6 +220,11 @@ void deserialize(NetworkPacket* packet, void* buffer) {
|
||||
case NetworkPacket::Type::PLAYER_UPDATE:
|
||||
deserializePlayer(packet, reinterpret_cast<char*>(buffer));
|
||||
break;
|
||||
|
||||
//map info
|
||||
case NetworkPacket::Type::REGION_CONTENT:
|
||||
serializeRegion(packet, reinterpret_cast<char*>(buffer));
|
||||
break;
|
||||
}
|
||||
// for (int i = 0; i < sizeof(NetworkPacket); i++) {
|
||||
// cout << ((char*)(buffer))[i];
|
||||
|
||||
@@ -66,7 +66,7 @@ void ServerApplication::Init(int argc, char** argv) {
|
||||
if (SDLNet_Init()) {
|
||||
throw(runtime_error("Failed to initialize SDL_net"));
|
||||
}
|
||||
network.Open(config.Int("server.port"), sizeof(NetworkPacket));
|
||||
network.Open(config.Int("server.port"), PACKET_BUFFER_SIZE);
|
||||
cout << "Initialized SDL_net" << endl;
|
||||
|
||||
//Init SQL
|
||||
@@ -105,6 +105,7 @@ void ServerApplication::Init(int argc, char** argv) {
|
||||
// with the map system as needed.
|
||||
cout << "Initialized the map system" << endl;
|
||||
cout << "\tsizeof(NetworkPacket): " << sizeof(NetworkPacket) << endl;
|
||||
cout << "\tPACKET_BUFFER_SIZE: " << PACKET_BUFFER_SIZE << endl;
|
||||
|
||||
//finalize the startup
|
||||
cout << "Startup completed successfully" << endl;
|
||||
@@ -189,9 +190,9 @@ void ServerApplication::HandleBroadcastRequest(NetworkPacket packet) {
|
||||
//TODO: version info
|
||||
snprintf(packet.serverInfo.name, PACKET_STRING_SIZE, "%s", config["server.name"].c_str());
|
||||
//TODO: player count
|
||||
char buffer[sizeof(NetworkPacket)];
|
||||
char buffer[PACKET_BUFFER_SIZE];
|
||||
serialize(&packet, buffer);
|
||||
network.Send(&packet.meta.srcAddress, buffer, sizeof(NetworkPacket));
|
||||
network.Send(&packet.meta.srcAddress, buffer, PACKET_BUFFER_SIZE);
|
||||
}
|
||||
|
||||
void ServerApplication::HandleJoinRequest(NetworkPacket packet) {
|
||||
@@ -201,13 +202,13 @@ void ServerApplication::HandleJoinRequest(NetworkPacket packet) {
|
||||
clientMap[clientCounter] = c;
|
||||
|
||||
//send the client their info
|
||||
char buffer[sizeof(NetworkPacket)];
|
||||
char buffer[PACKET_BUFFER_SIZE];
|
||||
|
||||
packet.meta.type = NetworkPacket::Type::JOIN_RESPONSE;
|
||||
packet.clientInfo.index = clientCounter;
|
||||
serialize(&packet, buffer);
|
||||
|
||||
network.Send(&clientMap[clientCounter].address, buffer, sizeof(NetworkPacket));
|
||||
network.Send(&clientMap[clientCounter].address, buffer, PACKET_BUFFER_SIZE);
|
||||
|
||||
//finished this routine
|
||||
clientCounter++;
|
||||
@@ -217,9 +218,9 @@ void ServerApplication::HandleJoinRequest(NetworkPacket packet) {
|
||||
void ServerApplication::HandleDisconnect(NetworkPacket packet) {
|
||||
//disconnect the specified client
|
||||
//TODO: authenticate who is disconnecting/kicking
|
||||
char buffer[sizeof(NetworkPacket)];
|
||||
char buffer[PACKET_BUFFER_SIZE];
|
||||
serialize(&packet, buffer);
|
||||
network.Send(&clientMap[packet.clientInfo.index].address, buffer, sizeof(NetworkPacket));
|
||||
network.Send(&clientMap[packet.clientInfo.index].address, buffer, PACKET_BUFFER_SIZE);
|
||||
clientMap.erase(packet.clientInfo.index);
|
||||
|
||||
//delete players from all clients
|
||||
@@ -245,7 +246,7 @@ void ServerApplication::HandleSynchronize(NetworkPacket packet) {
|
||||
//send all the server's data to this client
|
||||
//TODO: compensate for large distances
|
||||
NetworkPacket newPacket;
|
||||
char buffer[sizeof(NetworkPacket)];
|
||||
char buffer[PACKET_BUFFER_SIZE];
|
||||
|
||||
//players
|
||||
newPacket.meta.type = NetworkPacket::Type::PLAYER_UPDATE;
|
||||
@@ -256,7 +257,7 @@ void ServerApplication::HandleSynchronize(NetworkPacket packet) {
|
||||
newPacket.playerInfo.position = it.second.position;
|
||||
newPacket.playerInfo.motion = it.second.motion;
|
||||
serialize(&newPacket, buffer);
|
||||
network.Send(&clientMap[packet.clientInfo.index].address, buffer, sizeof(NetworkPacket));
|
||||
network.Send(&clientMap[packet.clientInfo.index].address, buffer, PACKET_BUFFER_SIZE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -334,9 +335,9 @@ void ServerApplication::HandlePlayerUpdate(NetworkPacket packet) {
|
||||
|
||||
void ServerApplication::PumpPacket(NetworkPacket packet) {
|
||||
//I don't really like this, but it'll do for now
|
||||
char buffer[sizeof(NetworkPacket)];
|
||||
char buffer[PACKET_BUFFER_SIZE];
|
||||
serialize(&packet, buffer);
|
||||
for (auto& it : clientMap) {
|
||||
network.Send(&it.second.address, buffer, sizeof(NetworkPacket));
|
||||
network.Send(&it.second.address, buffer, PACKET_BUFFER_SIZE);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user