#ifndef __UT_ROBOT_SDK_CLIENT_STUB_HPP__
#define __UT_ROBOT_SDK_CLIENT_STUB_HPP__

#include <unitree/robot/future/request_future.hpp>
#include <unitree/robot/channel/channel_labor.hpp>
#include <unitree/common/block_queue.hpp>

namespace unitree
{
namespace robot
{
class ClientStub
{
public:
    explicit ClientStub();
    ~ClientStub();

    void Init(const std::string& name);

    bool Send(const Request& req, int64_t waitTimeout);
    RequestFuturePtr SendRequest(const Request& req, int64_t waitTimeout);

private:
    void ResponseFunc(const void* message);

private:
    ChannelLaborPtr<Request,Response> mChannelLaborPtr;
    RequestFutureQueuePtr mFutureQueuePtr;
};

using ClientStubPtr = std::shared_ptr<ClientStub>;

}
}

#endif//__UT_ROBOT_SDK_CLIENT_STUB_HPP__