File size: 2,471 Bytes
053b80b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
#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;
//A flag indicating if the instance can be used.
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);
};
} // namespace Api
} // namespace Kinova
#endif // _ROUTER_CLIENT_H_
|