LeviLamina
Loading...
Searching...
No Matches
PacketRegistrar.h
1#pragma once
2
3#include <functional>
4#include <memory>
5#include <string_view>
6
7#include "ll/api/base/Containers.h"
8#include "ll/api/base/StdInt.h"
9
10namespace ll::network {
11
12class Packet;
13class IPacketHandler;
14
15using PacketRuntimeId = uint64;
16
17class PacketRegistrar {
18public:
19 using PacketFactory = std::function<std::unique_ptr<Packet>()>;
20 using PacketHandler = optional_ref<IPacketHandler>;
21
22 LLNDAPI static PacketRegistrar& getInstance();
23
24 LLAPI bool registerPacket(std::string_view name, PacketRuntimeId id, PacketFactory factory);
25 LLAPI bool registerPacket(std::string_view name, PacketRuntimeId id, PacketFactory factory, PacketHandler handler);
26 LLAPI bool registerHandler(std::string_view name, PacketRuntimeId id, PacketHandler handler);
27
28 LLNDAPI std::unique_ptr<Packet> createPacket(PacketRuntimeId runtimeId);
29 LLNDAPI PacketHandler getHandler(PacketRuntimeId runtimeId);
30
31private:
32 PacketRegistrar() = default;
33
34 ConcurrentDenseMap<PacketRuntimeId, PacketFactory> mPackets;
35 ConcurrentDenseMap<PacketRuntimeId, PacketHandler> mHandlers;
36};
37
38} // namespace ll::network
Definition Packet.h:62
Definition Packet.h:28
Definition optional_ref.h:10