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