Make PacketType an enum class

master
aurailus 2019-07-07 20:36:55 -07:00
parent 76173d06d1
commit 320c0cec0f
13 changed files with 94 additions and 49 deletions

View File

@ -166,6 +166,6 @@ set(ZEUS_SRC_FILES
api/client/LocalRegisterBlocks.h
api/server/ServerRegisterBlocks.cpp
api/server/ServerRegisterBlocks.h
server/conn/ServerClient.cpp)
server/conn/ServerClient.cpp server/config/ServerConfig.cpp server/config/ServerConfig.h util/net/PacketType.h)
add_library (zeusCore ${ZEUS_SRC_FILES})

View File

@ -243,7 +243,7 @@ Texture &TextureAtlas::getAtlasTexture() {
return *t;
}
std::shared_ptr<AtlasRef> TextureAtlas::getTextureRef(std::string &name) {
std::shared_ptr<AtlasRef> TextureAtlas::getTextureRef(const std::string &name) {
if (!textures.count(name)) {
std::cout << Log::err << "Invalid texture name: \"" << name << "\"." << Log::endl;
// return tryMakeGraphics(name);

View File

@ -29,7 +29,7 @@ public:
std::shared_ptr<AtlasRef> addImage(unsigned char *data, std::string name, bool base, int texWidth, int texHeight);
std::shared_ptr<AtlasRef> generateCrackImage(std::string &name, unsigned short crackLevel);
std::shared_ptr<AtlasRef> getTextureRef(std::string &name);
std::shared_ptr<AtlasRef> getTextureRef(const std::string &name);
~TextureAtlas();
private:

View File

@ -9,12 +9,9 @@ ServerConnection::ServerConnection(std::string address, unsigned short port, Tex
port(port),
address(std::move(address)) {
std::string front("player_front");
std::string back("player_back");
std::string shadow("player_shadow");
playerFrontTex = atlas.getTextureRef(front);
playerBackTex = atlas.getTextureRef(back);
shadowTex = atlas.getTextureRef(shadow);
playerFrontTex = atlas.getTextureRef("player_front");
playerBackTex = atlas.getTextureRef("player_back");
shadowTex = atlas.getTextureRef("player_shadow");
entities = new DrawableGroup();
}
@ -48,21 +45,19 @@ void ServerConnection::update(Player &player) {
Packet p(event.packet);
switch (p.type) {
case Packet::PLAYER_INFO: {
case PacketType::PLAYER_INFO: {
this->id = Serializer::decodeInt(&p.data[0]);
auto playerPos = Serializer::decodeFloatVec3(&p.data[4]);
player.setPos(playerPos);
break;
}
case Packet::ENTITY_INFO: {
case PacketType::ENTITY_INFO: {
int peer_id = Serializer::decodeInt(&p.data[0]);
if (peer_id == id) break;
auto playerPos = Serializer::decodeFloatVec3(&p.data[4]);
auto playerAngle = Serializer::decodeFloat(&p.data[16]);
std::cout << peer_id << std::endl;
bool found = false;
for (auto ent : entities->getChildren()) {
auto playerEntity = (PlayerEntity*)ent;
@ -82,17 +77,17 @@ void ServerConnection::update(Player &player) {
}
break;
}
case Packet::BLOCK_SET: {
case PacketType::BLOCK_SET: {
auto pos = Serializer::decodeIntVec3(&p.data[0]);
auto block = Serializer::decodeInt(&p.data[12]);
world->setBlock(pos, block);
break;
}
case Packet::CHUNK_INFO: {
case PacketType::CHUNK_INFO: {
chunkPackets.push_back(std::move(p));
break;
}
case Packet::SERVER_INFO: {
case PacketType::SERVER_INFO: {
serverSideChunkGens = Serializer::decodeInt(&p.data[0]);
break;
}
@ -115,7 +110,7 @@ void ServerConnection::update(Player &player) {
}
//Send Player Position
Packet p(Packet::PLAYER_INFO);
Packet p(PacketType::PLAYER_INFO);
Serializer::encodeFloat(p.data, player.getPos().x);
Serializer::encodeFloat(p.data, player.getPos().y - Player::EYE_HEIGHT);
Serializer::encodeFloat(p.data, player.getPos().z);
@ -133,7 +128,7 @@ ServerConnection::~ServerConnection() {
}
void ServerConnection::setBlock(glm::vec3 pos, int block) {
Packet p(Packet::BLOCK_SET);
Packet p(PacketType::BLOCK_SET);
Serializer::encodeIntVec3(p.data, pos);
Serializer::encodeInt(p.data, block);
p.sendTo(handler.getPeer(), PacketChannel::BLOCK_UPDATES);

View File

@ -9,7 +9,8 @@ Server::Server(unsigned short port) :
clientList(),
world(55, defs, clientList),
port(port),
handler(port, 32) {
handler(port, 32),
config(defs) {
defs.init(world);
world.init();
@ -48,7 +49,7 @@ void Server::update() {
handlePlayerPacket(*client, p);
}
else {
// handleConnectPacket(*client, p);
config.handlePacket(*client, p);
}
break;
@ -66,22 +67,21 @@ void Server::update() {
}
void Server::handlePlayerPacket(ServerClient &client, Packet& p) {
//Client *does* have a getPlayer, this is ensured in update().
//Client *does* have a player, this is ensured in update().
ServerPlayer& player = client.getPlayer();
switch (p.type) {
default: {
std::cout << Log::err << "Invalid packet type (" << p.type << ") recieved." << Log::endl;
std::cout << Log::err << "Invalid packet type (" << static_cast<int>(p.type) << ") recieved." << Log::endl;
break;
}
case Packet::PLAYER_INFO: {
case PacketType::PLAYER_INFO: {
player.setPos(Serializer::decodeFloatVec3(&p.data[0]));
player.setAngle(Serializer::decodeFloat(&p.data[12]));
//Send All ServerClients the new positon
Packet r(Packet::ENTITY_INFO);
Packet r(PacketType::ENTITY_INFO);
Serializer::encodeInt(r.data, client.getConnectID());
Serializer::encodeFloatVec3(r.data, player.getPos());
@ -96,7 +96,7 @@ void Server::handlePlayerPacket(ServerClient &client, Packet& p) {
break;
}
case Packet::BLOCK_SET: {
case PacketType::BLOCK_SET: {
auto pos = Serializer::decodeIntVec3(&p.data[0]);
auto block = Serializer::decodeInt(&p.data[12]);

View File

@ -13,10 +13,11 @@
#include "conn/ServerClient.h"
#include "conn/ServerClients.h"
#include "world/ServerWorld.h"
#include "config/ServerConfig.h"
#include "../def/ServerDefs.h"
#include "../util/net/Packet.h"
#include "../util/Timer.h"
#include "../util/net/NetHandler.h"
#include "../def/ServerDefs.h"
class Server {
public:
@ -35,6 +36,7 @@ private:
ServerWorld world;
NetHandler handler;
ServerClients clientList;
ServerConfig config;
double elapsedSeconds;
double deltaTime;

View File

@ -0,0 +1,16 @@
//
// Created by aurailus on 03/07/19.
//
#include "ServerConfig.h"
ServerConfig::ServerConfig(ServerDefs &defs) :
defs(defs) {
}
void ServerConfig::handlePacket(ServerClient &client, Packet &p) {
if (p.type == PacketType::MOD_DATA) {
return;
}
}

View File

@ -0,0 +1,21 @@
//
// Created by aurailus on 03/07/19.
//
#ifndef ZEUS_SERVERCONFIG_H
#define ZEUS_SERVERCONFIG_H
#include "../conn/ServerClient.h"
#include "../../def/ServerDefs.h"
#include "../../util/net/Packet.h"
class ServerConfig {
public:
explicit ServerConfig(ServerDefs& defs);
void handlePacket(ServerClient &client, Packet& p);
private:
ServerDefs& defs;
};
#endif //ZEUS_SERVERCONFIG_H

View File

@ -16,7 +16,7 @@ void ServerClients::handleConnect(ENetEvent e) {
client.initPlayer();
peer->data = &client;
Packet p(Packet::PLAYER_INFO);
Packet p(PacketType::PLAYER_INFO);
Serializer::encodeInt(p.data, client.getConnectID());
Serializer::encodeFloatVec3(p.data, client.getPlayer().getPos());
p.sendTo(peer, PacketChannel::PLAYER_INFO);
@ -36,7 +36,6 @@ void ServerClients::handleDisconnect(ENetEvent e) {
while (it != clients.end()) {
if ((*it).getConnectID() == connectID) {
found = true;
std::cout << Log::info << "Disconnected a Client." << Log::endl;
clients.erase(it);
break;
}

View File

@ -96,7 +96,7 @@ void ServerWorld::update() {
}
}
Packet r(Packet::SERVER_INFO);
Packet r(PacketType::SERVER_INFO);
Serializer::encodeInt(r.data, generatedChunks);
for (auto& client : clientList.clients) {
@ -112,7 +112,7 @@ void ServerWorld::sendChunk(glm::vec3 pos, ServerClient &peer) {
auto chunk = dimension.getChunk(pos);
auto serialized = chunk->serialize();
Packet r(Packet::CHUNK_INFO);
Packet r(PacketType::CHUNK_INFO);
Serializer::encodeIntVec3(r.data, pos);
Serializer::encodeString(r.data, serialized);
@ -138,7 +138,7 @@ void ServerWorld::setBlock(glm::vec3 pos, int block) {
dimension.setBlock(pos, block);
Packet b(Packet::BLOCK_SET);
Packet b(PacketType::BLOCK_SET);
Serializer::encodeIntVec3(b.data, pos);
Serializer::encodeInt(b.data, block);

View File

@ -4,21 +4,21 @@
#include "Packet.h"
Packet::Packet(int p) {
Packet::Packet(PacketType p) {
this->type = p;
}
Packet::Packet(ENetPacket *packet) {
std::string packetData(packet->data, packet->data + packet->dataLength);
this->type = Serializer::decodeInt(&packetData[0]);
this->type = static_cast<PacketType>(Serializer::decodeInt(&packetData[0]));
this->data = packetData.substr(4, packetData.length() - 4);
}
ENetPacket* Packet::toENetPacket() {
std::string serialized;
Serializer::encodeInt(serialized, this->type);
serialized += this->data;
Serializer::encodeInt(serialized, static_cast<int>(type));
serialized += data;
ENetPacket* enet = enet_packet_create(serialized.data(), serialized.length() + 1, ENET_PACKET_FLAG_RELIABLE);
return enet;

View File

@ -13,28 +13,18 @@
#include <enet/enet.h>
#include "Serializer.h"
#include "PacketType.h"
struct Packet {
enum {
UNDEFINED = 0,
HANDSHAKE,
AUTHENTICATE,
PLAYER_INFO,
ENTITY_INFO,
CHUNK_INFO,
SERVER_INFO,
BLOCK_SET
};
Packet() = default;
explicit Packet(int p);
explicit Packet(PacketType p);
explicit Packet(ENetPacket* packet);
ENetPacket* toENetPacket();
void sendTo(ENetPeer* peer, int channel);
void sendTo(const ENetPeer &peer, int channel);
int type = UNDEFINED;
PacketType type = PacketType::UNDEFINED;
std::string data;
~Packet() = default;

22
src/util/net/PacketType.h Normal file
View File

@ -0,0 +1,22 @@
//
// Created by aurailus on 07/07/19.
//
#ifndef ZEUS_PACKETTYPE_H
#define ZEUS_PACKETTYPE_H
enum class PacketType {
UNDEFINED = 0,
HANDSHAKE,
AUTHENTICATE,
MOD_DATA,
PLAYER_INFO,
ENTITY_INFO,
CHUNK_INFO,
SERVER_INFO,
BLOCK_SET,
};
#endif //ZEUS_PACKETTYPE_H