Make PacketType an enum class
parent
76173d06d1
commit
320c0cec0f
|
@ -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})
|
|
@ -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);
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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]);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
Loading…
Reference in New Issue