LeviLamina
Loading...
Searching...
No Matches
RuntimePacket.h
1#pragma once
2
3#include <memory>
4#include <string>
5
6#include "ll/api/network/packet/Packet.h"
7
8#include "mc/network/Packet.h"
9
10namespace ll::network {
11
12class RuntimePacket final : public ::Packet {
13 friend class ll::network::Packet;
14
15 std::unique_ptr<ll::network::Packet> mOwnedPacket;
17 PacketRuntimeId mRuntimeId{};
18
19 RuntimePacket(ll::network::Packet const& packet) : mPacket(packet) {
20 mRuntimeId = packet.getRuntimeId();
21 mReliability = packet.mReliability;
22 mPriority = packet.mPriority;
23 mCompressible = packet.mCompressible;
24 mSenderSubId = packet.mSenderSubId;
25 }
26
27public:
28 RuntimePacket() = default;
29
30 RuntimePacket(std::unique_ptr<ll::network::Packet> packet)
31 : mOwnedPacket(std::move(packet)),
32 mPacket(mOwnedPacket.get()) {
33 if (mPacket) {
34 mRuntimeId = mPacket->getRuntimeId();
35 mReliability = mPacket->mReliability;
36 mPriority = mPacket->mPriority;
37 mCompressible = mPacket->mCompressible;
38 mSenderSubId = mPacket->mSenderSubId;
39 }
40 }
41
42 [[nodiscard]] constexpr PacketRuntimeId getRuntimeId() const { return mRuntimeId; }
43
44 [[nodiscard]] bool isOwned() const { return mOwnedPacket != nullptr; }
45 [[nodiscard]] constexpr bool hasPacket() const { return mPacket.has_value(); }
46
47 [[nodiscard]] constexpr optional_ref<ll::network::Packet const> getPacket() const { return mPacket; }
48
49 [[nodiscard]] constexpr optional_ref<ll::network::Packet> getOwnedPacket() const { return mOwnedPacket.get(); }
50
51 constexpr void movePacket(std::unique_ptr<ll::network::Packet> newPacket) {
52 mOwnedPacket = std::move(newPacket);
53 mPacket = mOwnedPacket.get();
54 }
55
56 [[nodiscard]] constexpr std::unique_ptr<ll::network::Packet> releasePacket() {
57 mPacket = nullptr;
58 return std::move(mOwnedPacket);
59 }
60
61private:
62 LLNDAPI MinecraftPacketIds getId() const override;
63 LLNDAPI std::string_view getName() const override;
64 LLAPI void write(BinaryStream&) const override;
65 LLAPI Bedrock::Result<void> _read(ReadOnlyBinaryStream&) override;
66};
67
68}; // namespace ll::network
Definition Result.h:9
Definition BinaryStream.h:10
Definition ReadOnlyBinaryStream.h:8
Definition Packet.h:32
Definition optional_ref.h:10