COROIO: coroio/actors/messages_factory.hpp Source File
COROIO
Loading...
Searching...
No Matches
messages_factory.hpp
1#pragma once
2
3#include "messages.hpp"
4
5#include <vector>
6#include <functional>
7
8namespace NNet {
9namespace NActors {
10
12public:
13 template<typename T>
14 void RegisterSerializer() {
15 constexpr auto messageId = T::MessageId;
16 if (Handlers_.size() <= messageId) {
17 Handlers_.resize(messageId + 1);
18 }
19 auto serializeFunc = [](TBlob&& blob) {
20 return ::NNet::NActors::SerializeFar<T>(std::move(blob));
21 };
22 Handlers_[messageId] = std::move(serializeFunc);
23 }
24
25 TBlob SerializeFar(uint32_t messageId, TBlob blob) {
26 if (messageId >= Handlers_.size() || !Handlers_[messageId]) [[unlikely]] {
27 throw std::runtime_error(
28 std::string("No handler for message ID: ") + std::to_string(messageId)
29 );
30 }
31 return Handlers_[messageId](std::move(blob));
32 }
33
34private:
35#if __cpp_lib_move_only_function >= 202110L
36 std::vector<std::move_only_function<TBlob(TBlob&&)>> Handlers_;
37#else
38 std::vector<std::function<TBlob(TBlob&&)>> Handlers_;
39#endif
40};
41
42} // namespace NActors
43} // namespace NNet
Definition messages_factory.hpp:11
Definition messages.hpp:11