| #ifndef _ROUTER_CLIENT_H_
|
| #define _ROUTER_CLIENT_H_
|
|
|
|
|
| #include <string>
|
| #include <future>
|
| #include <functional>
|
| #include <exception>
|
|
|
| #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<Error (Frame&)> > NotificationServices;
|
|
|
| class RouterClient : public IRouterClient
|
| {
|
| private:
|
| ITransportClient* const m_transport;
|
|
|
| NotificationServices m_notificationServices;
|
| function<void(KError)> m_errorCallback;
|
| function<void(FrameTypes)> m_hitSessionCallback;
|
| function<void(Frame&)> m_bridgingCallback;
|
|
|
| FrameHandler m_frameHandler;
|
| uint16_t m_msgId;
|
| uint16_t m_sessionId;
|
|
|
|
|
| bool m_isActive;
|
|
|
| std::mutex m_send_mutex;
|
|
|
| public:
|
| RouterClient(ITransportClient* transport, function<void (KError)> errorCallback);
|
| virtual ~RouterClient();
|
|
|
| virtual void reset() override;
|
| virtual void registerBridgingCallback(std::function<void (Frame &)> bridgingCallback) override;
|
| virtual void registerNotificationCallback( uint32_t serviceId, function<Error (Frame&)> ) override;
|
| virtual void registerErrorCallback( function<void(KError)> callback ) override;
|
| virtual void registerHitCallback(std::function<void (FrameTypes)> hitSessionCallback) override;
|
|
|
| virtual future<Frame> 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);
|
| };
|
|
|
| }
|
| }
|
|
|
| #endif
|
|
|