HiveMindBridge
HiveMindBridgeImpl.h
Go to the documentation of this file.
1 #ifndef HIVEMIND_BRIDGE_HIVEMINDBRIDGEIMPL_H
2 #define HIVEMIND_BRIDGE_HIVEMINDBRIDGEIMPL_H
3 
4 #include "Callback.h"
6 #include "IUserCallbackMap.h"
14 #include "pheromones/FunctionCallRequestDTO.h"
15 #include <cmath>
16 #include <cpp-common/ILogger.h>
17 #include <deque>
18 #include <memory>
19 #include <mutex>
20 #include <pheromones/BytesDTO.h>
21 #include <pheromones/HiveMindHostDeserializer.h>
22 #include <pheromones/HiveMindHostSerializer.h>
23 #include <thread>
24 
25 constexpr int THREAD_SLEEP_MS = 1; // The sleep time of the trheads
26 constexpr int DELAY_BRFORE_DROP_S =
27  10; // The maximum delay before which a request will be dropped if no response was received.
28 
30  public:
46  HiveMindBridgeImpl(ITCPServer& tcpServer,
47  IHiveMindHostSerializer& serializer,
48  IHiveMindHostDeserializer& deserializer,
49  IUserCallRequestHandler& userCallRequestManager,
50  IHiveMindHostRequestHandler& hmRequestHandler,
51  IUserCallbackMap& userCallbackMap,
52  IMessageHandler& messageHandler,
53  IThreadSafeQueue<MessageDTO>& inboundQueue,
55  ILogger& logger,
56  uint32_t keepAliveNbSpin);
57 
59 
60  void spin();
61 
62  void onConnect(std::function<void()> hook);
63 
64  void onDisconnect(std::function<void()> hook);
65 
66  bool onBytesReceived(std::function<void(uint8_t* bytes, uint64_t bytesLength)> callback);
67 
68  bool registerCustomAction(std::string name,
69  CallbackFunction callback,
70  CallbackArgsManifest manifest);
71 
72  bool registerCustomAction(std::string name, CallbackFunction callback);
73 
74  bool queueAndSend(MessageDTO message);
75 
76  bool sendBytes(uint32_t destinationId, const uint8_t* const payload, uint16_t payloadSize);
77 
78  uint32_t getSwarmAgentId() const;
79 
80  bool sendNeighborUpdateRequest(uint16_t neighborId);
81 
83 
84  private:
85  ILogger& m_logger;
86 
88  IHiveMindHostDeserializer& m_deserializer;
89  IHiveMindHostSerializer& m_serializer;
92 
95 
97  std::thread m_inboundThread;
99  std::thread m_outboundThread;
100  std::mutex m_mutex;
101 
102  std::deque<InboundRequestHandle> m_inboundRequestsQueue;
103  std::unordered_map<uint32_t, InboundResponseHandle> m_inboundResponsesMap;
104 
105  uint32_t m_swarmAgentID = 0;
106  const uint32_t m_keepAliveNbSpin;
107  uint32_t m_keepAliveCounter = 0;
108 
109  void inboundThread();
110  void outboundThread();
111  bool isTCPClientConnected();
112  void sendReturn(InboundRequestHandle& result);
113  bool greet();
114 };
115 
116 #endif // HIVEMIND_BRIDGE_HIVEMINDBRIDGEIMPL_H
DELAY_BRFORE_DROP_S
constexpr int DELAY_BRFORE_DROP_S
Definition: HiveMindBridgeImpl.h:26
OutboundRequestHandle.h
HiveMindBridgeImpl::m_swarmAgentID
uint32_t m_swarmAgentID
Definition: HiveMindBridgeImpl.h:105
CallbackArgsManifest
std::vector< UserCallbackArgumentDescription > CallbackArgsManifest
Definition: Callback.h:11
HiveMindBridgeImpl::m_messageHandler
IMessageHandler & m_messageHandler
Definition: HiveMindBridgeImpl.h:94
HiveMindBridgeImpl::m_inboundThread
std::thread m_inboundThread
Definition: HiveMindBridgeImpl.h:97
HiveMindBridgeImpl::onBytesReceived
bool onBytesReceived(std::function< void(uint8_t *bytes, uint64_t bytesLength)> callback)
Definition: HiveMindBridgeImpl.cpp:115
THREAD_SLEEP_MS
constexpr int THREAD_SLEEP_MS
Definition: HiveMindBridgeImpl.h:25
HiveMindBridgeImpl::m_outboundThread
std::thread m_outboundThread
Definition: HiveMindBridgeImpl.h:99
IUserCallbackMap
Definition: IUserCallbackMap.h:6
HiveMindBridgeImpl::sendNeighborListUpdateRequest
bool sendNeighborListUpdateRequest()
Definition: HiveMindBridgeImpl.cpp:296
IThreadSafeQueue< MessageDTO >
CallbackFunction
std::function< std::optional< CallbackReturn >CallbackArgs)> CallbackFunction
Definition: Callback.h:31
HiveMindBridgeImpl::m_inboundQueue
IThreadSafeQueue< MessageDTO > & m_inboundQueue
Definition: HiveMindBridgeImpl.h:96
InboundRequestHandle.h
HiveMindBridgeImpl::queueAndSend
bool queueAndSend(MessageDTO message)
Definition: HiveMindBridgeImpl.cpp:130
IThreadSafeQueue.h
ITCPServer
Definition: ITCPServer.h:7
HiveMindBridgeImpl::outboundThread
void outboundThread()
Definition: HiveMindBridgeImpl.cpp:188
HiveMindBridgeImpl::m_keepAliveNbSpin
const uint32_t m_keepAliveNbSpin
Definition: HiveMindBridgeImpl.h:106
HiveMindBridgeImpl::m_deserializer
IHiveMindHostDeserializer & m_deserializer
Definition: HiveMindBridgeImpl.h:88
Callback.h
HiveMindBridgeImpl::sendBytes
bool sendBytes(uint32_t destinationId, const uint8_t *const payload, uint16_t payloadSize)
Definition: HiveMindBridgeImpl.cpp:140
InboundRequestHandle
Definition: InboundRequestHandle.h:13
HiveMindBridgeImpl::m_userCallRequestHandler
IUserCallRequestHandler & m_userCallRequestHandler
Definition: HiveMindBridgeImpl.h:90
HiveMindBridgeImpl::sendNeighborUpdateRequest
bool sendNeighborUpdateRequest(uint16_t neighborId)
Definition: HiveMindBridgeImpl.cpp:287
HiveMindBridgeImpl::m_inboundResponsesMap
std::unordered_map< uint32_t, InboundResponseHandle > m_inboundResponsesMap
Definition: HiveMindBridgeImpl.h:103
HiveMindBridgeImpl
Definition: HiveMindBridgeImpl.h:29
HiveMindBridgeImpl::getSwarmAgentId
uint32_t getSwarmAgentId() const
Definition: HiveMindBridgeImpl.cpp:175
HiveMindBridgeImpl::registerCustomAction
bool registerCustomAction(std::string name, CallbackFunction callback, CallbackArgsManifest manifest)
Definition: HiveMindBridgeImpl.cpp:119
IUserCallRequestHandler.h
IUserCallbackMap.h
HiveMindBridgeImpl::m_mutex
std::mutex m_mutex
Definition: HiveMindBridgeImpl.h:100
HiveMindBridgeImpl::m_inboundRequestsQueue
std::deque< InboundRequestHandle > m_inboundRequestsQueue
Definition: HiveMindBridgeImpl.h:102
HiveMindBridgeImpl::m_userCallbackMap
IUserCallbackMap & m_userCallbackMap
Definition: HiveMindBridgeImpl.h:93
HiveMindBridgeImpl::isTCPClientConnected
bool isTCPClientConnected()
Definition: HiveMindBridgeImpl.cpp:235
HiveMindBridgeImpl::greet
bool greet()
Definition: HiveMindBridgeImpl.cpp:268
HiveMindBridgeImpl::m_logger
ILogger & m_logger
Definition: HiveMindBridgeImpl.h:85
HiveMindBridgeImpl::m_tcpServer
ITCPServer & m_tcpServer
Definition: HiveMindBridgeImpl.h:87
IHiveMindHostRequestHandler
Definition: IHiveMindHostApiRequestHandler.h:8
HiveMindBridgeImpl::m_hmRequestHandler
IHiveMindHostRequestHandler & m_hmRequestHandler
Definition: HiveMindBridgeImpl.h:91
HiveMindBridgeImpl::spin
void spin()
Definition: HiveMindBridgeImpl.cpp:40
HiveMindBridgeImpl::m_keepAliveCounter
uint32_t m_keepAliveCounter
Definition: HiveMindBridgeImpl.h:107
IHiveMindBridge.h
HiveMindBridgeImpl::onDisconnect
void onDisconnect(std::function< void()> hook)
Definition: HiveMindBridgeImpl.cpp:111
HiveMindBridgeImpl::m_serializer
IHiveMindHostSerializer & m_serializer
Definition: HiveMindBridgeImpl.h:89
HiveMindBridgeImpl::sendReturn
void sendReturn(InboundRequestHandle &result)
Definition: HiveMindBridgeImpl.cpp:240
MessageHandler.h
TCPServer.h
HiveMindBridgeImpl::inboundThread
void inboundThread()
Definition: HiveMindBridgeImpl.cpp:177
HiveMindBridgeImpl::m_outboundQueue
IThreadSafeQueue< OutboundRequestHandle > & m_outboundQueue
Definition: HiveMindBridgeImpl.h:98
IUserCallRequestHandler
Definition: IUserCallRequestHandler.h:7
IHiveMindHostApiResponseHandler.h
HiveMindBridgeImpl::~HiveMindBridgeImpl
~HiveMindBridgeImpl()
Definition: HiveMindBridgeImpl.cpp:28
HiveMindBridgeImpl::onConnect
void onConnect(std::function< void()> hook)
Definition: HiveMindBridgeImpl.cpp:107
HiveMindBridgeImpl::HiveMindBridgeImpl
HiveMindBridgeImpl(ITCPServer &tcpServer, IHiveMindHostSerializer &serializer, IHiveMindHostDeserializer &deserializer, IUserCallRequestHandler &userCallRequestManager, IHiveMindHostRequestHandler &hmRequestHandler, IUserCallbackMap &userCallbackMap, IMessageHandler &messageHandler, IThreadSafeQueue< MessageDTO > &inboundQueue, IThreadSafeQueue< OutboundRequestHandle > &outboundQueue, ILogger &logger, uint32_t keepAliveNbSpin)
Definition: HiveMindBridgeImpl.cpp:5
IMessageHandler
Definition: IMessageHandler.h:17