Skip to content
LeviMC
English
AutoLightDark
LeviLamina
Loading...
Searching...
No Matches
PacketRegistrar.h
1#pragma once
2
3#include <functional>
4#include <memory>
5#include <string>
6#include <string_view>
7#include <utility>
8#include <vector>
9
10#include "ll/api/base/Macro.h"
11#include "ll/api/base/StdInt.h"
12#include "ll/api/mod/NativeMod.h"
13
14#include "mc/deps/core/utility/optional_ref.h"
15
16namespace ll::network {
17
18class Packet;
19class IPacketHandler;
20
21using PacketRuntimeId = uint64;
22
23enum class PacketSide : uchar {
24 Server = 1 << 0,
25 Client = 1 << 1,
26 Both = Server | Client,
27};
28
29class PacketRegistrar {
30 struct Impl;
31 std::unique_ptr<Impl> impl;
32
33 PacketRegistrar();
34 ~PacketRegistrar();
35
36 void removeMod(std::string_view name);
37
38public:
39 using PacketFactory = std::function<std::unique_ptr<Packet>()>;
40 using PacketHandler = optional_ref<IPacketHandler>;
41
42 LLNDAPI static PacketRegistrar& getInstance();
43
44 LLAPI bool registerPacket(
45 std::string_view name,
46 PacketRuntimeId id,
47 PacketFactory factory,
48 PacketSide side = PacketSide::Both,
49 bool optional = false,
50 std::weak_ptr<mod::Mod> mod = mod::NativeMod::current()
51 );
52 LLAPI bool registerPacket(
53 std::string_view name,
54 PacketRuntimeId id,
55 PacketFactory factory,
56 PacketHandler handler,
57 PacketSide side = PacketSide::Both,
58 bool optional = false,
59 std::weak_ptr<mod::Mod> mod = mod::NativeMod::current()
60 );
61 LLAPI bool registerHandler(
62 std::string_view name,
63 PacketRuntimeId id,
64 PacketHandler handler,
65 PacketSide side = PacketSide::Both,
66 std::weak_ptr<mod::Mod> mod = mod::NativeMod::current()
67 );
68
69 LLAPI bool unregisterPacket(PacketRuntimeId id);
70 LLAPI bool unregisterHandler(PacketRuntimeId id, PacketSide side = PacketSide::Both);
71
72 LLNDAPI std::unique_ptr<Packet> createPacket(PacketRuntimeId runtimeId);
73 LLNDAPI PacketHandler getHandler(PacketRuntimeId runtimeId, PacketSide side);
74
75 LLNDAPI std::vector<PacketRuntimeId> getHandledPackets(PacketSide side) const;
76
77 LLNDAPI std::vector<std::pair<PacketRuntimeId, std::string>> getRequiredPackets(PacketSide side) const;
78};
79
80} // namespace ll::network
Definition Packet.h:93
Definition Packet.h:34
Definition optional_ref.h:10