30 PacketPriority mPriority;
31 NetworkPeer::Reliability mReliability;
32 SubClientId mSenderSubId;
33 Compressibility mCompressible;
35 [[nodiscard]]
constexpr explicit Packet(
36 PacketPriority priority = PacketPriority::MediumPriority,
37 NetworkPeer::Reliability reliability = NetworkPeer::Reliability::ReliableOrdered,
38 SubClientId clientSubId = SubClientId::PrimaryClient,
41 : mPriority(priority),
42 mReliability(reliability),
43 mSenderSubId(clientSubId),
44 mCompressible(compress ? Compressibility::Compressible : Compressibility::Incompressible) {}
46 virtual ~Packet() =
default;
50 [[nodiscard]] virtual ::std::string getName()
const = 0;
52 [[nodiscard]]
virtual PacketRuntimeId getRuntimeId()
const;
54 LLAPI
void sendToServer()
const;
55 LLAPI
void sendToClient(
::NetworkIdentifier const& identifier, ::SubClientId clientId)
const;
57 LLAPI
void sendToClients(::std::vector<::NetworkIdentifierWithSubId>
const&);
58 LLAPI
void sendBroadcast();
71 static bool ensureRegistered() {
72 PacketRegistrar::getInstance().registerPacket(
73 reflection::type_unprefix_name_v<Derived>,
74 ll::hash_utils::doHash(reflection::type_unprefix_name_v<Derived>),
75 []() -> std::unique_ptr<Packet> {
return std::make_unique<Derived>(); }
84 [[nodiscard]] ::std::string getName()
const override {
85 return ::std::string(reflection::type_unprefix_name_v<Derived>);
87 [[nodiscard]] PacketRuntimeId getRuntimeId()
const override {
88 constexpr PacketRuntimeId runtimeId = ll::hash_utils::doHash(reflection::type_unprefix_name_v<Derived>);
92 inline static bool sRegistered = ensureRegistered();
97 static bool ensureRegistered() {
98 static Derived instance;
99 PacketRegistrar::getInstance().registerHandler(
100 reflection::type_unprefix_name_v<PacketType>,
101 ll::hash_utils::doHash(reflection::type_unprefix_name_v<PacketType>),
107 inline static bool sRegistered = ensureRegistered();
111 static_cast<const Derived*
>(
this)->handlePacket(netId, callback,
static_cast<const PacketType&
>(packet));