more doc
This commit is contained in:
@@ -19,8 +19,9 @@ class EnetServer;
|
|||||||
|
|
||||||
|
|
||||||
#define DeclarePacket(PacketName, ...) \
|
#define DeclarePacket(PacketName, ...) \
|
||||||
|
/** Sends a PacketName over the network */ \
|
||||||
void Send##PacketName(const blitz::protocol::data::PacketName& a_##PacketName) const; \
|
void Send##PacketName(const blitz::protocol::data::PacketName& a_##PacketName) const; \
|
||||||
\
|
/** Use On##PacketName.Connect() to process a PacketName incoming from network */ \
|
||||||
NazaraSignal(On##PacketName, const blitz::protocol::data::PacketName&);
|
NazaraSignal(On##PacketName, const blitz::protocol::data::PacketName&);
|
||||||
|
|
||||||
|
|
||||||
@@ -33,10 +34,10 @@ class EnetConnexion {
|
|||||||
|
|
||||||
bool IsConnected() const;
|
bool IsConnected() const;
|
||||||
|
|
||||||
DeclareAllPacket()
|
DeclareAllPacket();
|
||||||
|
|
||||||
private :
|
private:
|
||||||
Nz::ENetPeer* m_Peer;
|
Nz::ENetPeer* m_Peer;
|
||||||
|
|
||||||
void Recieve(Nz::ByteArray&);
|
void Recieve(Nz::ByteArray&);
|
||||||
void SetPeer(Nz::ENetPeer* a_Peer);
|
void SetPeer(Nz::ENetPeer* a_Peer);
|
||||||
|
|||||||
@@ -1,8 +1,17 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file PacketDeclare.h
|
||||||
|
* \brief Holds the definitions of the packets (but not their content)
|
||||||
|
*/
|
||||||
|
|
||||||
namespace blitz {
|
namespace blitz {
|
||||||
namespace protocol {
|
namespace protocol {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \enum PacketSender
|
||||||
|
* \brief Indicate who should send a packet
|
||||||
|
*/
|
||||||
enum class PacketSender {
|
enum class PacketSender {
|
||||||
/** Sent by clients and server */
|
/** Sent by clients and server */
|
||||||
Both,
|
Both,
|
||||||
@@ -18,22 +27,22 @@ enum class PacketSender {
|
|||||||
* \brief Avoids repetitive operations on packets
|
* \brief Avoids repetitive operations on packets
|
||||||
*/
|
*/
|
||||||
#define DeclareAllPacket() \
|
#define DeclareAllPacket() \
|
||||||
DeclarePacket(ChatMessage, Nz::ENetPacketFlag::Reliable, blitz::protocol::PacketSender::Both) \
|
DeclarePacket(ChatMessage, Reliable, Both) \
|
||||||
DeclarePacket(Disconnect, Nz::ENetPacketFlag::Reliable, blitz::protocol::PacketSender::Both) \
|
DeclarePacket(Disconnect, Reliable, Both) \
|
||||||
DeclarePacket(KeepAlive, Nz::ENetPacketFlag::Reliable, blitz::protocol::PacketSender::Both) \
|
DeclarePacket(KeepAlive, Reliable, Both) \
|
||||||
DeclarePacket(LoggingSuccess, Nz::ENetPacketFlag::Reliable, blitz::protocol::PacketSender::Server) \
|
DeclarePacket(LoggingSuccess, Reliable, Server) \
|
||||||
DeclarePacket(PlayerDeath, Nz::ENetPacketFlag::Reliable, blitz::protocol::PacketSender::Server) \
|
DeclarePacket(PlayerDeath, Reliable, Server) \
|
||||||
DeclarePacket(PlayerJoin, Nz::ENetPacketFlag::Reliable, blitz::protocol::PacketSender::Server) \
|
DeclarePacket(PlayerJoin, Reliable, Server) \
|
||||||
DeclarePacket(PlayerLeave, Nz::ENetPacketFlag::Reliable, blitz::protocol::PacketSender::Server) \
|
DeclarePacket(PlayerLeave, Reliable, Server) \
|
||||||
DeclarePacket(PlayerList, Nz::ENetPacketFlag::Reliable, blitz::protocol::PacketSender::Server) \
|
DeclarePacket(PlayerList, Reliable, Server) \
|
||||||
DeclarePacket(PlayerLogin, Nz::ENetPacketFlag::Reliable, blitz::protocol::PacketSender::Client) \
|
DeclarePacket(PlayerLogin, Reliable, Client) \
|
||||||
DeclarePacket(PlayerPositionAndRotation, Nz::ENetPacketFlag::Reliable, blitz::protocol::PacketSender::Both) \
|
DeclarePacket(PlayerPositionAndRotation, Reliable, Both) \
|
||||||
DeclarePacket(PlayerShoot, Nz::ENetPacketFlag::Reliable, blitz::protocol::PacketSender::Both) \
|
DeclarePacket(PlayerShoot, Reliable, Both) \
|
||||||
DeclarePacket(PlayerStats, Nz::ENetPacketFlag::Reliable, blitz::protocol::PacketSender::Server) \
|
DeclarePacket(PlayerStats, Reliable, Server) \
|
||||||
DeclarePacket(ServerConfig, Nz::ENetPacketFlag::Reliable, blitz::protocol::PacketSender::Server) \
|
DeclarePacket(ServerConfig, Reliable, Server) \
|
||||||
DeclarePacket(ServerTps, Nz::ENetPacketFlag::Reliable, blitz::protocol::PacketSender::Server) \
|
DeclarePacket(ServerTps, Reliable, Server) \
|
||||||
DeclarePacket(UpdateGameState, Nz::ENetPacketFlag::Reliable, blitz::protocol::PacketSender::Server) \
|
DeclarePacket(UpdateGameState, Reliable, Server) \
|
||||||
DeclarePacket(UpdateHealth, Nz::ENetPacketFlag::Reliable, blitz::protocol::PacketSender::Client)
|
DeclarePacket(UpdateHealth, Reliable, Client)
|
||||||
|
|
||||||
|
|
||||||
} // namespace protocol
|
} // namespace protocol
|
||||||
|
|||||||
@@ -1,20 +1,34 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <blitz/protocol/Packets.h>
|
/**
|
||||||
|
* \file PacketVisitor.h
|
||||||
|
* \brief File containing the blitz::protocol::PacketVisitor class
|
||||||
|
*/
|
||||||
|
|
||||||
#include <blitz/protocol/PacketDeclare.h>
|
#include <blitz/protocol/PacketDeclare.h>
|
||||||
|
#include <blitz/protocol/Packets.h>
|
||||||
|
|
||||||
namespace blitz {
|
namespace blitz {
|
||||||
namespace protocol {
|
namespace protocol {
|
||||||
|
|
||||||
#define DeclarePacket(PacketName, ...) \
|
#define DeclarePacket(PacketName, ...) \
|
||||||
|
/** This function is called when the packet processed by PacketVisitor::Check is a PacketName */ \
|
||||||
virtual void Visit(const packets::PacketName&) {}
|
virtual void Visit(const packets::PacketName&) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \class PacketVisitor
|
||||||
|
* \brief This class uses double-dispatch in order to find the real type of a packet
|
||||||
|
*/
|
||||||
class PacketVisitor {
|
class PacketVisitor {
|
||||||
protected:
|
protected:
|
||||||
PacketVisitor() {}
|
PacketVisitor() {}
|
||||||
virtual ~PacketVisitor() {}
|
virtual ~PacketVisitor() {}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
/**
|
||||||
|
* \brief Calls the right PacketVisitor::Visit method corresponding to the real type of the packet
|
||||||
|
* \param packet the Packet to visit
|
||||||
|
*/
|
||||||
void Check(const Packet& packet);
|
void Check(const Packet& packet);
|
||||||
|
|
||||||
DeclareAllPacket()
|
DeclareAllPacket()
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file Packets.h
|
||||||
|
* \brief File containing the definitions of the packets
|
||||||
|
*/
|
||||||
|
|
||||||
#include <blitz/protocol/PacketData.h>
|
#include <blitz/protocol/PacketData.h>
|
||||||
#include <blitz/protocol/PacketDeclare.h>
|
#include <blitz/protocol/PacketDeclare.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
@@ -9,14 +14,20 @@ namespace protocol {
|
|||||||
|
|
||||||
class PacketVisitor;
|
class PacketVisitor;
|
||||||
|
|
||||||
|
/** A Packet id is 8 bits wide */
|
||||||
using PacketID = std::uint8_t;
|
using PacketID = std::uint8_t;
|
||||||
|
|
||||||
#define DeclarePacket(PacketName, ...) PacketName,
|
#define DeclarePacket(PacketName, ...) /** PacketName */ PacketName,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \enum PacketType
|
||||||
|
* \brief Map a Packet to an id
|
||||||
|
*/
|
||||||
enum class PacketType : PacketID {
|
enum class PacketType : PacketID {
|
||||||
|
|
||||||
DeclareAllPacket()
|
DeclareAllPacket()
|
||||||
|
|
||||||
|
/** The number of packets */
|
||||||
PACKET_COUNT
|
PACKET_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -26,9 +37,16 @@ enum class PacketType : PacketID {
|
|||||||
|
|
||||||
class Packet {
|
class Packet {
|
||||||
public:
|
public:
|
||||||
|
/**
|
||||||
|
* \return The real type of the packet
|
||||||
|
*/
|
||||||
virtual PacketType GetType() const = 0;
|
virtual PacketType GetType() const = 0;
|
||||||
|
|
||||||
|
private:
|
||||||
|
/** Use a PacketVisitor to make double-dispatch possible */
|
||||||
virtual void Accept(PacketVisitor& a_Visitor) const = 0;
|
virtual void Accept(PacketVisitor& a_Visitor) const = 0;
|
||||||
|
|
||||||
|
friend class PacketVisitor;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -38,16 +56,21 @@ class Packet {
|
|||||||
namespace packets {
|
namespace packets {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* \class ConcretePacket
|
||||||
|
* \brief A Packet associated with an id and holding data
|
||||||
* \tparam PT The packet type
|
* \tparam PT The packet type
|
||||||
* \tparam Data The structure holding the data of the packet (in blitz::protocol::data namespace)
|
* \tparam Data The structure holding the data of the packet (in blitz::protocol::data namespace)
|
||||||
*/
|
*/
|
||||||
template <PacketType PT, typename Data>
|
template <PacketType PT, typename Data>
|
||||||
class ConcretePacket : public Packet {
|
class ConcretePacket : public Packet {
|
||||||
public:
|
public:
|
||||||
|
/** The type of the struct holding the data */
|
||||||
using PacketDataType = Data;
|
using PacketDataType = Data;
|
||||||
|
|
||||||
|
/** The structure holding the actual data */
|
||||||
PacketDataType m_Data;
|
PacketDataType m_Data;
|
||||||
|
|
||||||
|
/** Construct the packet with data of type PacketDataType */
|
||||||
ConcretePacket(const PacketDataType& a_Data = {});
|
ConcretePacket(const PacketDataType& a_Data = {});
|
||||||
|
|
||||||
constexpr PacketType GetType() const override {
|
constexpr PacketType GetType() const override {
|
||||||
@@ -56,8 +79,6 @@ class ConcretePacket : public Packet {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void Accept(PacketVisitor& a_Visitor) const override;
|
void Accept(PacketVisitor& a_Visitor) const override;
|
||||||
|
|
||||||
friend class PacketVisitor;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -72,7 +93,8 @@ class ConcretePacket : public Packet {
|
|||||||
using PacketName = ConcretePacket<PacketType::PacketName, data::PacketName>; \
|
using PacketName = ConcretePacket<PacketType::PacketName, data::PacketName>; \
|
||||||
template class ConcretePacket<PacketType::PacketName, data::PacketName>;
|
template class ConcretePacket<PacketType::PacketName, data::PacketName>;
|
||||||
#else
|
#else
|
||||||
#define DeclarePacket(PacketName, ...) using PacketName = ConcretePacket<PacketType::PacketName, data::PacketName>;
|
#define DeclarePacket(PacketName, ...) /** Defines the PacketName packet */ \
|
||||||
|
using PacketName = ConcretePacket<PacketType::PacketName, data::PacketName>;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
DeclareAllPacket()
|
DeclareAllPacket()
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ void EnetConnexion::Recieve(Nz::ByteArray& a_Data) {
|
|||||||
|
|
||||||
#define DeclarePacket(Name, NFlag, ...) \
|
#define DeclarePacket(Name, NFlag, ...) \
|
||||||
void EnetConnexion::Send##Name(const blitz::protocol::data::Name& a_##Name) const { \
|
void EnetConnexion::Send##Name(const blitz::protocol::data::Name& a_##Name) const { \
|
||||||
m_Peer->Send(0, NFlag, protocol::PacketSerializer::Serialize(protocol::packets::Name(a_##Name))); \
|
m_Peer->Send(0, Nz::ENetPacketFlag::NFlag, protocol::PacketSerializer::Serialize(protocol::packets::Name(a_##Name))); \
|
||||||
}
|
}
|
||||||
|
|
||||||
DeclareAllPacket()
|
DeclareAllPacket()
|
||||||
|
|||||||
Reference in New Issue
Block a user