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
7namespace NNet {
8namespace NActors {
9
11public:
12 template<typename T>
13 void RegisterSerializer() {
14 constexpr auto messageId = T::MessageId;
15 if (Handlers_.size() <= messageId) {
16 Handlers_.resize(messageId + 1);
17 }
18 auto serializeFunc = +[](TBlob&& blob) {
19 return ::NNet::NActors::SerializeFar<T>(std::move(blob));
20 };
21 Handlers_[messageId] = serializeFunc;
22 }
23
24 TBlob SerializeFar(uint32_t messageId, TBlob blob) {
25 if (messageId >= Handlers_.size() || !Handlers_[messageId]) [[unlikely]] {
26 throw std::runtime_error(
27 std::string("No handler for message ID: ") + std::to_string(messageId)
28 );
29 }
30 return Handlers_[messageId](std::move(blob));
31 }
32
33private:
34 std::vector<TBlob(*)(TBlob&&)> Handlers_;
35};
36
37} // namespace NActors
38} // namespace NNet
Definition messages_factory.hpp:10
Definition messages.hpp:84