One Protocol per DedicatedServer

This commit is contained in:
DankParrot 2020-07-31 18:36:29 -07:00
parent 1667740c23
commit 3df02252f7
4 changed files with 14 additions and 5 deletions

View File

@ -1,7 +1,6 @@
#include "DedicatedServer.h"
#include "config/ServerProperties.h"
#include "Protocol.h"
#include "PacketReader.h"
namespace Feather
@ -9,7 +8,8 @@ namespace Feather
DedicatedServer::DedicatedServer(ServerProperties* properties) :
m_properties(properties),
m_listener(properties->serverPort.GetValue(), this),
m_status()
m_status(),
m_protocol(*this)
{
m_status.descriptionText = properties->motd.GetValue();
m_status.maxPlayers = properties->maxPlayers.GetValue();
@ -19,12 +19,11 @@ namespace Feather
auto [clients, clientsLock] = m_clients.borrow();
for (auto& client : clients)
{
Protocol protocol;
auto [data, clientLock] = client.GetTCPClient().GetData().borrow();
if (data.empty())
continue;
auto reader = PacketReader(data.data());
protocol.HandlePacket(client, reader);
m_protocol.HandlePacket(client, reader);
data.clear();
}
}

View File

@ -2,6 +2,7 @@
#include "MinecraftClient.h"
#include "ServerStatus.h"
#include "Protocol.h"
#include "network/IListenerInterface.h"
@ -18,10 +19,13 @@ namespace Feather
void OnClientConnect(Network::TCPClient&& client) override;
void OnClientDisconnect(const Network::TCPClient& client) override;
ServerStatus& GetStatus() { return m_status; }
private:
ServerProperties* m_properties;
Network::TCPListener m_listener;
ServerStatus m_status;
Protocol m_protocol;
LockableList<MinecraftClient> m_clients;
};

View File

@ -2,6 +2,7 @@
#include "PacketReader.h"
#include "PacketTypes.h"
#include "MinecraftClient.h"
#include "DedicatedServer.h"
#include <string>

View File

@ -1,10 +1,12 @@
#pragma once
#include "Common.h"
#include "NetworkMessage.h"
#include <cstdio>
namespace Feather
{
class DedicatedServer;
class PacketReader;
class MinecraftClient;
@ -26,7 +28,7 @@ namespace Feather
inline void SetState(ProtocolState state)
{
printf("Setting state");
Log_Info("Setting state: %d", (int)state);
m_state = state;
}
private:
@ -35,7 +37,10 @@ namespace Feather
class Protocol
{
DedicatedServer& m_server;
public:
Protocol(DedicatedServer& server) : m_server(server) {}
void HandlePacket(MinecraftClient& client, PacketReader& packet);
};
}