DDS  ver. 1.6
ChannelMessageHandlersImpl.h
Go to the documentation of this file.
1 // Copyright 2015 GSI, Inc. All rights reserved.
2 //
3 //
4 //
5 #ifndef DDS_ChannelMessageHandlersImpl_h
6 #define DDS_ChannelMessageHandlersImpl_h
7 // DDS
8 #include "ProtocolCommands.h"
9 
10 namespace dds
11 {
12  namespace protocol_api
13  {
16  {
17  };
18  template <typename T>
20  {
22 
23  SHandlerHlpBaseFunc(T _function)
24  : m_function(_function)
25  {
26  }
27  };
28 
30  {
31  private:
32  // Generic container of listeners for any type of function
33  typedef std::multimap<ECmdType, std::unique_ptr<SHandlerHlpFunc>> Listeners_t;
34 
35  public:
36  template <ECmdType _cmd, typename Func>
37  void registerMessageHandler(Func _handler)
38  {
39  std::unique_ptr<SHandlerHlpFunc> func_ptr(new SHandlerHlpBaseFunc<Func>(_handler));
40  m_registeredMessageHandlers.insert(Listeners_t::value_type(_cmd, std::move(func_ptr)));
41  }
42 
43  template <class... Args>
44  void dispatchMessageHandlers(ECmdType _cmd, Args&&... args)
45  {
46  typedef std::function<bool(Args...)> Func_t;
47  auto functions = m_registeredMessageHandlers.equal_range(_cmd);
48  for (auto it = functions.first; it != functions.second; ++it)
49  {
50  const SHandlerHlpFunc& f = *it->second;
51  Func_t func = static_cast<const SHandlerHlpBaseFunc<Func_t>&>(f).m_function;
52  func(std::forward<Args>(args)...);
53  }
54  }
55 
56  template <ECmdType _cmd>
57  size_t getNofMessageHandlers() const
58  {
59  return m_registeredMessageHandlers.count(_cmd);
60  }
61 
62  private:
63  Listeners_t m_registeredMessageHandlers;
64  };
65  }
66 }
67 
68 #endif
Helpers for event dispatching.
Definition: ChannelMessageHandlersImpl.h:15
void dispatchMessageHandlers(ECmdType _cmd, Args &&... args)
Definition: ChannelMessageHandlersImpl.h:44
Definition: ChannelMessageHandlersImpl.h:19
Definition: dds-agent/src/AgentConnectionManager.h:16
void registerMessageHandler(Func _handler)
Definition: ChannelMessageHandlersImpl.h:37
T m_function
Definition: ChannelMessageHandlersImpl.h:21
size_t getNofMessageHandlers() const
Definition: ChannelMessageHandlersImpl.h:57
SHandlerHlpBaseFunc(T _function)
Definition: ChannelMessageHandlersImpl.h:23
Definition: ChannelMessageHandlersImpl.h:29
ECmdType
Definition: ProtocolCommands.h:25