TARAXA
packets_handler.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <memory>
4 #include <unordered_map>
5 
7 
8 namespace taraxa::network::tarcap {
9 
14  public:
23  const std::shared_ptr<PacketHandler>& getSpecificHandler(SubprotocolPacketType packet_type) const;
24 
32  template <typename PacketHandlerType>
33  std::shared_ptr<PacketHandlerType> getSpecificHandler();
34 
42  template <typename PacketHandlerType, typename... Args>
43  void registerHandler(Args&&... args);
44 
45  private:
46  // Map of all packets handlers, factory method selects specific packet handler for processing based on packet type
47  std::unordered_map<SubprotocolPacketType, std::shared_ptr<PacketHandler>> packets_handlers_;
48 };
49 
50 template <typename PacketHandlerType>
51 std::shared_ptr<PacketHandlerType> PacketsHandler::getSpecificHandler() {
52  return std::static_pointer_cast<PacketHandlerType>(getSpecificHandler(PacketHandlerType::kPacketType_));
53 }
54 
55 template <typename PacketHandlerType, typename... Args>
56 void PacketsHandler::registerHandler(Args&&... args) {
57  assert(packets_handlers_.find(PacketHandlerType::kPacketType_) == packets_handlers_.end());
58  packets_handlers_.emplace(PacketHandlerType::kPacketType_,
59  std::make_shared<PacketHandlerType>(std::forward<Args>(args)...));
60 }
61 
62 } // namespace taraxa::network::tarcap
Generic PacketsHandler that contains all specific packet handlers.
Definition: packets_handler.hpp:13
std::shared_ptr< PacketHandlerType > getSpecificHandler()
templated getSpecificHandler method for getting specific packet handler based on PacketHandlerType::k...
Definition: packets_handler.hpp:51
void registerHandler(Args &&... args)
Registers packet handler.
Definition: packets_handler.hpp:56
std::unordered_map< SubprotocolPacketType, std::shared_ptr< PacketHandler > > packets_handlers_
Definition: packets_handler.hpp:47
Definition: vote_manager.hpp:23
SubprotocolPacketType
SubprotocolPacketType is used in networking layer to differentiate packet types.
Definition: packet_types.hpp:12