init
This commit is contained in:
82
unitree_SDK/include/unitree/robot/future/request_future.hpp
Normal file
82
unitree_SDK/include/unitree/robot/future/request_future.hpp
Normal file
@@ -0,0 +1,82 @@
|
||||
#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__
|
Reference in New Issue
Block a user