hmbdc
simplify-high-performance-messaging-programming
MessageHandler.hpp
1 #include "hmbdc/Copyright.hpp"
2 #pragma once
3 
4 #include "hmbdc/app/Message.hpp"
5 
6 namespace hmbdc { namespace app {
7 
8 namespace messagehandler_detail {
9 struct no_more{};
10 
11 template <typename CcClient, typename Message>
12 struct dispatcher {
13  bool operator()(CcClient* p, MessageHead& m) {
14  if (m.typeTag == Message::typeTag) {
15  p->handleMessageCb(m.get<Message>());
16  return true;
17  }
18  return false;
19  }
20 };
21 
22 template <typename CcClient>
23 struct dispatcher<CcClient, JustBytes> {
24  bool operator()(CcClient* p, MessageHead& m) {
25  if (m.typeTag > 1000) { //only deliver user messages
26  auto j = &m.get<uint8_t>();
27  p->handleJustBytesCb(m.typeTag, j);
28  }
29  return false;
30  }
31 };
32 
33 }
34 
35 template <typename CcClient, typename ... Messages>
37  static void tryDispatch(CcClient* p, MessageHead& w){
38  }
39  void handleMessage(MessageHead& w) {
40  }
41 };
42 
43 template <typename CcClient, typename M, typename ... Messages>
44 struct MessageHandler<CcClient, M, Messages...> {
45  static void tryDispatch(CcClient* p, MessageHead& e) {
47  NEH::tryDispatch(p, e);
48  }
49  void handleMessage(MessageHead& w) {
50  tryDispatch(static_cast<CcClient*>(this), w);
51  }
52 
53  using NEH = MessageHandler<CcClient, Messages ...>;
54 };
55 
56 }}
Definition: MessageHandler.hpp:12
Definition: Message.hpp:34
A special type of message.
Definition: Message.hpp:115
Definition: MessageHandler.hpp:9
Definition: Base.hpp:12
Definition: MessageHandler.hpp:36