2023-10-19 16:19:09 +02:00
|
|
|
/*
|
|
|
|
* NetPacksBase.h, part of VCMI engine
|
|
|
|
*
|
|
|
|
* Authors: listed in file AUTHORS in main folder
|
|
|
|
*
|
|
|
|
* License: GNU General Public License v2.0 or later
|
|
|
|
* Full text of license available in license.txt file, in main folder
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
|
2023-10-23 15:38:05 +02:00
|
|
|
#include "../constants/EntityIdentifiers.h"
|
2024-05-07 21:17:05 +02:00
|
|
|
#include "../serializer/Serializeable.h"
|
2023-10-19 16:19:09 +02:00
|
|
|
|
|
|
|
VCMI_LIB_NAMESPACE_BEGIN
|
|
|
|
|
|
|
|
class CGameState;
|
|
|
|
class CConnection;
|
|
|
|
|
|
|
|
class ICPackVisitor;
|
|
|
|
|
2024-05-07 21:17:05 +02:00
|
|
|
struct DLL_LINKAGE CPack : public Serializeable
|
2023-10-19 16:19:09 +02:00
|
|
|
{
|
2023-11-13 13:43:46 +02:00
|
|
|
/// Pointer to connection that pack received from
|
|
|
|
/// Only set & used on server
|
|
|
|
std::shared_ptr<CConnection> c;
|
2023-10-19 16:19:09 +02:00
|
|
|
|
|
|
|
CPack() = default;
|
|
|
|
virtual ~CPack() = default;
|
|
|
|
|
2024-01-20 20:34:51 +02:00
|
|
|
template <typename Handler> void serialize(Handler &h)
|
2023-10-19 16:19:09 +02:00
|
|
|
{
|
|
|
|
logNetwork->error("CPack serialized... this should not happen!");
|
2024-05-07 10:34:47 +02:00
|
|
|
throw std::runtime_error("CPack serialized... this should not happen!");
|
2023-10-19 16:19:09 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void visit(ICPackVisitor & cpackVisitor);
|
|
|
|
|
|
|
|
protected:
|
|
|
|
/// <summary>
|
|
|
|
/// For basic types of netpacks hierarchy like CPackForClient. Called first.
|
|
|
|
/// </summary>
|
|
|
|
virtual void visitBasic(ICPackVisitor & cpackVisitor);
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// For leaf types of netpacks hierarchy. Called after visitBasic.
|
|
|
|
/// </summary>
|
|
|
|
virtual void visitTyped(ICPackVisitor & cpackVisitor);
|
|
|
|
};
|
|
|
|
|
|
|
|
struct DLL_LINKAGE CPackForClient : public CPack
|
|
|
|
{
|
2024-08-23 22:56:32 +02:00
|
|
|
virtual void applyGs(CGameState * gs) = 0;
|
|
|
|
|
2023-10-19 16:19:09 +02:00
|
|
|
protected:
|
2023-10-23 15:38:05 +02:00
|
|
|
void visitBasic(ICPackVisitor & cpackVisitor) override;
|
2023-10-19 16:19:09 +02:00
|
|
|
};
|
|
|
|
|
2023-10-23 12:59:15 +02:00
|
|
|
struct DLL_LINKAGE Query : public CPackForClient
|
|
|
|
{
|
|
|
|
QueryID queryID; // equals to -1 if it is not an actual query (and should not be answered)
|
|
|
|
};
|
|
|
|
|
2023-10-19 16:19:09 +02:00
|
|
|
struct DLL_LINKAGE CPackForServer : public CPack
|
|
|
|
{
|
|
|
|
mutable PlayerColor player = PlayerColor::NEUTRAL;
|
2024-02-12 12:31:27 +02:00
|
|
|
mutable uint32_t requestID = 0;
|
2023-10-19 16:19:09 +02:00
|
|
|
|
2024-01-20 20:34:51 +02:00
|
|
|
template <typename Handler> void serialize(Handler &h)
|
2023-10-19 16:19:09 +02:00
|
|
|
{
|
|
|
|
h & player;
|
|
|
|
h & requestID;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected:
|
2023-10-23 15:38:05 +02:00
|
|
|
void visitBasic(ICPackVisitor & cpackVisitor) override;
|
2023-10-19 16:19:09 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
struct DLL_LINKAGE CPackForLobby : public CPack
|
|
|
|
{
|
|
|
|
virtual bool isForServer() const;
|
|
|
|
|
|
|
|
protected:
|
2023-10-23 15:38:05 +02:00
|
|
|
void visitBasic(ICPackVisitor & cpackVisitor) override;
|
2023-10-19 16:19:09 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
VCMI_LIB_NAMESPACE_END
|