#ifndef _ROUTER_CLIENT_H_ #define _ROUTER_CLIENT_H_ #include #include #include #include #include "messages/Frame.pb.h" #include "ITransportClient.h" #include "IRouterClient.h" #include "FrameHandler.h" using namespace std; namespace Kinova { namespace Api { typedef map< uint32_t, function > NotificationServices; class RouterClient : public IRouterClient { private: ITransportClient* const m_transport; NotificationServices m_notificationServices; function m_errorCallback; function m_hitSessionCallback; function m_bridgingCallback; FrameHandler m_frameHandler; uint16_t m_msgId; uint16_t m_sessionId; //A flag indicating if the instance can be used. bool m_isActive; std::mutex m_send_mutex; public: RouterClient(ITransportClient* transport, function errorCallback); virtual ~RouterClient(); virtual void reset() override; virtual void registerBridgingCallback(std::function bridgingCallback) override; virtual void registerNotificationCallback( uint32_t serviceId, function ) override; virtual void registerErrorCallback( function callback ) override; virtual void registerHitCallback(std::function hitSessionCallback) override; virtual future send(const std::string& txPayload, uint32_t serviceVersion, uint32_t funcId, uint32_t deviceId, const RouterClientSendOptions& options ) override; virtual Error sendWithCallback(const std::string& txPayload, uint32_t serviceVersion, uint32_t funcId, uint32_t deviceId, MessageCallback callback) override; virtual Error sendMsgFrame(const Frame& msgFrame) override; virtual uint16_t getConnectionId() override; virtual void SetActivationStatus(bool isActive) override; virtual ITransportClient* getTransport() override {return m_transport;} private: uint16_t generateNewMsgId(); void frameHandler(const void *rxBuffer, uint32_t rxSize); }; } // namespace Api } // namespace Kinova #endif // _ROUTER_CLIENT_H_