83 lines
1.7 KiB
C++
83 lines
1.7 KiB
C++
|
#ifndef __UT_DDS_ROBOT_REQUEST_FUTURE_HPP__
|
||
|
#define __UT_DDS_ROBOT_REQUEST_FUTURE_HPP__
|
||
|
|
||
|
#include <unitree/common/lock/lock.hpp>
|
||
|
#include <unitree/robot/internal/internal.hpp>
|
||
|
|
||
|
namespace unitree
|
||
|
{
|
||
|
namespace robot
|
||
|
{
|
||
|
class RequestFutureQueue;
|
||
|
using RequestFutureQueuePtr = std::shared_ptr<RequestFutureQueue>;
|
||
|
|
||
|
/*
|
||
|
* @brief
|
||
|
* @class: RequestFuture
|
||
|
*/
|
||
|
class RequestFuture : public std::enable_shared_from_this<RequestFuture>
|
||
|
{
|
||
|
public:
|
||
|
enum
|
||
|
{
|
||
|
DEFER = 0,
|
||
|
READY = 1
|
||
|
};
|
||
|
|
||
|
explicit RequestFuture();
|
||
|
explicit RequestFuture(int64_t requestId);
|
||
|
~RequestFuture();
|
||
|
|
||
|
void SetRequestId(int64_t requestId);
|
||
|
int64_t GetRequestId() const;
|
||
|
|
||
|
bool SetQueue(const std::shared_ptr<RequestFutureQueue>& futureQueuePtr);
|
||
|
|
||
|
const ResponsePtr& GetResponse(int64_t microsec);
|
||
|
|
||
|
public:
|
||
|
void Ready(const ResponsePtr& requestPtr);
|
||
|
|
||
|
private:
|
||
|
bool IsDeferred();
|
||
|
bool IsReady();
|
||
|
|
||
|
private:
|
||
|
int32_t mState;
|
||
|
int64_t mRequestId;
|
||
|
ResponsePtr mResponsePtr;
|
||
|
common::MutexCond mMutexCond;
|
||
|
RequestFutureQueuePtr mFutureQueuePtr;
|
||
|
};
|
||
|
|
||
|
using RequestFuturePtr = std::shared_ptr<RequestFuture>;
|
||
|
|
||
|
/*
|
||
|
* @brief
|
||
|
* @class: RequestFutureQueue
|
||
|
*/
|
||
|
class RequestFutureQueue
|
||
|
{
|
||
|
public:
|
||
|
using iterator = std::unordered_map<int64_t,RequestFuturePtr>::iterator;
|
||
|
using const_iterator = std::unordered_map<int64_t,RequestFuturePtr>::const_iterator;
|
||
|
|
||
|
RequestFutureQueue();
|
||
|
~RequestFutureQueue();
|
||
|
|
||
|
RequestFuturePtr Get(int64_t requestId);
|
||
|
bool Put(int64_t requestId, const RequestFuturePtr& futurePtr);
|
||
|
void Remove(int64_t requestId);
|
||
|
|
||
|
size_t Size();
|
||
|
|
||
|
private:
|
||
|
common::Mutex mMutex;
|
||
|
std::unordered_map<int64_t,RequestFuturePtr> mFutureMap;
|
||
|
};
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#endif//__UT_DDS_ROBOT_REQUEST_FUTURE_HPP__
|