diff options
author | Jacob Keeler <jacob.keeler@livioradio.com> | 2016-09-20 11:44:51 -0400 |
---|---|---|
committer | Jacob Keeler <jacob.keeler@livioradio.com> | 2016-09-20 14:37:25 -0400 |
commit | 039581419749dbdd32590804e8b14a77fcaf9636 (patch) | |
tree | ced927fc4bef4686f7373a5f45dd692bd9fc9de0 /src/components/application_manager/include/application_manager/request_info.h | |
parent | 1b96b7c02d2e338b846a7314c6fa0bdaa31f7c5e (diff) | |
parent | aff7f09a4ec07becfb64dc78992580061d3342ff (diff) | |
download | sdl_core-039581419749dbdd32590804e8b14a77fcaf9636.tar.gz |
Merge branch 'master'
Diffstat (limited to 'src/components/application_manager/include/application_manager/request_info.h')
-rw-r--r-- | src/components/application_manager/include/application_manager/request_info.h | 610 |
1 files changed, 301 insertions, 309 deletions
diff --git a/src/components/application_manager/include/application_manager/request_info.h b/src/components/application_manager/include/application_manager/request_info.h index 25fd025f76..c0a85e1f5e 100644 --- a/src/components/application_manager/include/application_manager/request_info.h +++ b/src/components/application_manager/include/application_manager/request_info.h @@ -48,344 +48,336 @@ namespace application_manager { namespace request_controller { +/* + * @brief Typedef for active mobile request + * + */ +typedef utils::SharedPtr<commands::Command> RequestPtr; + +struct RequestInfo { + enum RequestType { RequestNone, MobileRequest, HMIRequest }; + + RequestInfo() + : timeout_msec_(0) + , app_id_(0) + , hmi_level_(mobile_apis::HMILevel::INVALID_ENUM) + , requst_type_(RequestNone) + , correlation_id_(0) { + start_time_ = date_time::DateTime::getCurrentTime(); + updateEndTime(); + } + virtual ~RequestInfo() {} + + RequestInfo(RequestPtr request, + const RequestType requst_type, + const uint64_t timeout_msec) + : request_(request) + , timeout_msec_(timeout_msec) + , hmi_level_(mobile_apis::HMILevel::INVALID_ENUM) + , correlation_id_(0) { + start_time_ = date_time::DateTime::getCurrentTime(); + updateEndTime(); + requst_type_ = requst_type; + } + + RequestInfo(RequestPtr request, + const RequestType requst_type, + const TimevalStruct& start_time, + const uint64_t timeout_msec); + + void updateEndTime(); + + void updateTimeOut(const uint64_t& timeout_msec); + + bool isExpired(); + + TimevalStruct start_time() { + return start_time_; + } + + void update_start_time(TimevalStruct start_time) { + start_time_ = start_time; + } + + uint64_t timeout_msec() { + return timeout_msec_; + } + + void set_timeout_msec(uint64_t timeout) { + timeout_msec_ = timeout; + } + + TimevalStruct end_time() { + return end_time_; + } + + uint32_t app_id() { + return app_id_; + } + + mobile_apis::HMILevel::eType hmi_level() { + return hmi_level_; + } + + void set_hmi_level(const mobile_apis::HMILevel::eType& level) { + hmi_level_ = level; + } + + RequestType requst_type() const { + return requst_type_; + } + + uint32_t requestId() { + return correlation_id_; + } + + commands::Command* request() { + return request_.get(); + } + uint64_t hash(); + static uint64_t GenerateHash(uint32_t var1, uint32_t var2); + static uint32_t HmiConnectoinKey; + + protected: + RequestPtr request_; + TimevalStruct start_time_; + uint64_t timeout_msec_; + TimevalStruct end_time_; + uint32_t app_id_; + mobile_apis::HMILevel::eType hmi_level_; + RequestType requst_type_; + uint32_t correlation_id_; +}; + +typedef utils::SharedPtr<RequestInfo> RequestInfoPtr; + +struct MobileRequestInfo : public RequestInfo { + MobileRequestInfo(RequestPtr request, const uint64_t timeout_msec); + MobileRequestInfo(RequestPtr request, + const TimevalStruct& start_time, + const uint64_t timeout_msec); +}; + +struct HMIRequestInfo : public RequestInfo { + HMIRequestInfo(RequestPtr request, const uint64_t timeout_msec); + HMIRequestInfo(RequestPtr request, + const TimevalStruct& start_time, + const uint64_t timeout_msec); +}; + +// Request info, for searching in request info set by log_n time +// Returns correct hash by app_id and corr_id +struct FakeRequestInfo : public RequestInfo { + FakeRequestInfo(uint32_t app_id, uint32_t correaltion_id); +}; + +struct RequestInfoTimeComparator { + bool operator()(const RequestInfoPtr lhs, const RequestInfoPtr rhs) const; +}; + +struct RequestInfoHashComparator { + bool operator()(const RequestInfoPtr lhs, const RequestInfoPtr rhs) const; +}; + +typedef std::set<RequestInfoPtr, RequestInfoTimeComparator> + TimeSortedRequestInfoSet; +typedef std::set<RequestInfoPtr, RequestInfoHashComparator> + HashSortedRequestInfoSet; + +/* + * @brief RequestInfoSet provides uniue requests bu corralation_id and app_id + * + */ +class RequestInfoSet { + public: /* - * @brief Typedef for active mobile request - * + * @brief Add requests into colletion by log(n) time + * @param request_info - request to add + * @return false is request with the same app_id and correlation_id exist */ - typedef utils::SharedPtr<commands::Command> RequestPtr; - - struct RequestInfo { - enum RequestType {RequestNone, MobileRequest, HMIRequest}; - - RequestInfo() - : timeout_sec_(0), - app_id_(0), - hmi_level_(mobile_apis::HMILevel::INVALID_ENUM), - requst_type_(RequestNone), - correlation_id_(0) { - start_time_ = date_time::DateTime::getCurrentTime(); - updateEndTime(); - } - virtual ~RequestInfo() {} - - RequestInfo(RequestPtr request, - const RequestType requst_type, - const uint64_t timeout_sec) - : request_(request), - timeout_sec_(timeout_sec), - app_id_(0), - hmi_level_(mobile_apis::HMILevel::INVALID_ENUM), - correlation_id_(0) { - start_time_ = date_time::DateTime::getCurrentTime(); - updateEndTime(); - requst_type_ = requst_type; - } - - RequestInfo(RequestPtr request, const RequestType requst_type, - const TimevalStruct& start_time, const uint64_t timeout_sec); - - void updateEndTime(); - - void updateTimeOut(const uint64_t& timeout_sec); - - bool isExpired(); - - TimevalStruct start_time() { - return start_time_; - } + bool Add(RequestInfoPtr request_info); - void update_start_time(TimevalStruct start_time) { - start_time_ = start_time; - } + /* + * @brief Find requests int colletion by log(n) time + * @param connection_key - connection_key of request + * @param correlation_id - correlation_id of request + * @return founded request or shared_ptr with NULL + */ + RequestInfoPtr Find(const uint32_t connection_key, + const uint32_t correlation_id); - uint64_t timeout_sec() { - return timeout_sec_; - } + /* + * @brief Get request with smalest end_time_ + * @return founded request or shared_ptr with NULL + */ + RequestInfoPtr Front(); - void set_timeout_sec(uint64_t timeout) { - timeout_sec_ = timeout; - } + /* + * @brief Get request with smalest end_time_ != 0 + * @return founded request or shared_ptr with NULL + */ + RequestInfoPtr FrontWithNotNullTimeout(); - TimevalStruct end_time() { - return end_time_; - } + /* + * @brief Erase request from colletion by log(n) time + * @param request_info - request to erase + * @return true if Erase succes, otherwise return false + */ + bool RemoveRequest(const RequestInfoPtr request_info); - uint32_t app_id() { - return app_id_; - } + /* + * @brief Erase request from colletion by connection_key + * @param connection_key - connection_key of requests to erase + * @return count of erased requests + */ + uint32_t RemoveByConnectionKey(uint32_t connection_key); - mobile_apis::HMILevel::eType hmi_level() { - return hmi_level_; - } + /* + * @brief Erase all mobile requests from controller + * @return count of erased requests + */ + uint32_t RemoveMobileRequests(); - void set_hmi_level(const mobile_apis::HMILevel::eType& level) { - hmi_level_ = level; - } + /* + * @return count of requestd in collections + */ + const size_t Size(); - RequestType requst_type() const { - return requst_type_; - } + /** + * @brief Check if this app is able to add new requests, + * or limits was exceeded + * @param app_id - application id + * @param app_time_scale - time scale (seconds) + * @param max_request_per_time_scale - maximum count of request + * that should be allowed for app_time_scale seconds + * @return True if new request could be added, false otherwise + */ + bool CheckTimeScaleMaxRequest(uint32_t app_id, + uint32_t app_time_scale, + uint32_t max_request_per_time_scale); - uint32_t requestId() { - return correlation_id_; - } + /** + * @brief Check if this app is able to add new requests + * in current hmi_level, or limits was exceeded + * @param hmi_level - hmi level + * @param app_id - application id + * @param app_time_scale - time scale (seconds) + * @param max_request_per_time_scale - maximum count of request + * that should be allowed for app_time_scale seconds + * @return True if new request could be added, false otherwise + */ + bool CheckHMILevelTimeScaleMaxRequest(mobile_apis::HMILevel::eType hmi_level, + uint32_t app_id, + uint32_t app_time_scale, + uint32_t max_request_per_time_scale); - commands::Command* request() { - return request_.get(); - } - uint64_t hash(); - static uint64_t GenerateHash(uint32_t var1, uint32_t var2); - static uint32_t HmiConnectoinKey; - protected: - RequestPtr request_; - TimevalStruct start_time_; - uint64_t timeout_sec_; - TimevalStruct end_time_; - uint32_t app_id_; - mobile_apis::HMILevel::eType hmi_level_; - RequestType requst_type_; - uint32_t correlation_id_; + private: + /* + * @brief Comparator of connection key for std::find_if function + */ + struct AppIdCompararator { + enum CompareType { Equal, NotEqual }; + AppIdCompararator(CompareType compare_type, uint32_t app_id) + : app_id_(app_id), compare_type_(compare_type) {} + bool operator()(const RequestInfoPtr value_compare) const; + + private: + uint32_t app_id_; + CompareType compare_type_; }; - typedef utils::SharedPtr<RequestInfo> RequestInfoPtr; + bool Erase(const RequestInfoPtr request_info); - struct MobileRequestInfo: public RequestInfo { - MobileRequestInfo(RequestPtr request, - const uint64_t timeout_sec); - MobileRequestInfo(RequestPtr request, - const TimevalStruct& start_time, - const uint64_t timeout_sec); - }; + /* + * @brief Erase requests from collection if filter allows + * @param filter - filtering predicate + * @return count of erased requests + */ + uint32_t RemoveRequests(const RequestInfoSet::AppIdCompararator& filter); - struct HMIRequestInfo: public RequestInfo { - HMIRequestInfo(RequestPtr request, const uint64_t timeout_sec); - HMIRequestInfo(RequestPtr request, const TimevalStruct& start_time, - const uint64_t timeout_sec); - }; + /* + * @brief Debug function, will raise assert if set sizes are noit equal + */ + inline void CheckSetSizes(); + TimeSortedRequestInfoSet time_sorted_pending_requests_; + HashSortedRequestInfoSet hash_sorted_pending_requests_; - // Request info, for searching in request info set by log_n time - // Returns correct hash by app_id and corr_id - struct FakeRequestInfo :public RequestInfo { - FakeRequestInfo(uint32_t app_id, uint32_t correaltion_id); - }; + // the lock caled this_lock_, since the class represent collection by itself. + sync_primitives::Lock this_lock_; +}; - struct RequestInfoTimeComparator { - bool operator() (const RequestInfoPtr lhs, - const RequestInfoPtr rhs) const; - }; +/** +* @brief Structure used in std algorithms to determine amount of request +* during time scale +*/ +struct TimeScale { + TimeScale(const TimevalStruct& start, + const TimevalStruct& end, + const uint32_t& app_id) + : start_(start), end_(end), app_id_(app_id) {} + + bool operator()(RequestInfoPtr setEntry) { + if (!setEntry.valid()) { + return false; + } - struct RequestInfoHashComparator { - bool operator() (const RequestInfoPtr lhs, - const RequestInfoPtr rhs) const; - }; + if (setEntry->app_id() != app_id_) { + return false; + } + if ((setEntry->start_time() < start_) || (end_ < setEntry->start_time())) { + return false; + } - typedef std::set<RequestInfoPtr, RequestInfoTimeComparator> TimeSortedRequestInfoSet; - typedef std::set<RequestInfoPtr, RequestInfoHashComparator> HashSortedRequestInfoSet; + return true; + } - /* - * @brief RequestInfoSet provides uniue requests bu corralation_id and app_id - * - */ - class RequestInfoSet { - public: - /* - * @brief Add requests into colletion by log(n) time - * @param request_info - request to add - * @return false is request with the same app_id and correlation_id exist - */ - bool Add(RequestInfoPtr request_info); - - /* - * @brief Find requests int colletion by log(n) time - * @param connection_key - connection_key of request - * @param correlation_id - correlation_id of request - * @return founded request or shared_ptr with NULL - */ - RequestInfoPtr Find(const uint32_t connection_key, - const uint32_t correlation_id); - - /* - * @brief Get request with smalest end_time_ - * @return founded request or shared_ptr with NULL - */ - RequestInfoPtr Front(); - - /* - * @brief Get request with smalest end_time_ != 0 - * @return founded request or shared_ptr with NULL - */ - RequestInfoPtr FrontWithNotNullTimeout(); - - /* - * @brief Erase request from colletion by log(n) time - * @param request_info - request to erase - * @return true if Erase succes, otherwise return false - */ - bool RemoveRequest(const RequestInfoPtr request_info); - - /* - * @brief Erase request from colletion by connection_key - * @param connection_key - connection_key of requests to erase - * @return count of erased requests - */ - uint32_t RemoveByConnectionKey(uint32_t connection_key); - - /* - * @brief Erase all mobile requests from controller - * @return count of erased requests - */ - uint32_t RemoveMobileRequests(); - - /* - * @return count of requestd in collections - */ - const size_t Size(); - - /** - * @brief Check if this app is able to add new requests, - * or limits was exceeded - * @param app_id - application id - * @param app_time_scale - time scale (seconds) - * @param max_request_per_time_scale - maximum count of request - * that should be allowed for app_time_scale seconds - * @return True if new request could be added, false otherwise - */ - bool CheckTimeScaleMaxRequest(uint32_t app_id, - uint32_t app_time_scale, - uint32_t max_request_per_time_scale); - - /** - * @brief Check if this app is able to add new requests - * in current hmi_level, or limits was exceeded - * @param hmi_level - hmi level - * @param app_id - application id - * @param app_time_scale - time scale (seconds) - * @param max_request_per_time_scale - maximum count of request - * that should be allowed for app_time_scale seconds - * @return True if new request could be added, false otherwise - */ - bool CheckHMILevelTimeScaleMaxRequest(mobile_apis::HMILevel::eType hmi_level, - uint32_t app_id, - uint32_t app_time_scale, - uint32_t max_request_per_time_scale); - private: - /* - * @brief Comparator of connection key for std::find_if function - */ - struct AppIdCompararator { - enum CompareType {Equal, NotEqual}; - AppIdCompararator(CompareType compare_type, uint32_t app_id): - app_id_(app_id), - compare_type_(compare_type) {} - bool operator()(const RequestInfoPtr value_compare) const; - - private: - uint32_t app_id_; - CompareType compare_type_; - }; - - bool Erase(const RequestInfoPtr request_info); - - /* - * @brief Erase requests from collection if filter allows - * @param filter - filtering predicate - * @return count of erased requests - */ - uint32_t RemoveRequests(const RequestInfoSet::AppIdCompararator& filter); - - /* - * @brief Debug function, will raise assert if set sizes are noit equal - */ - inline void CheckSetSizes(); - TimeSortedRequestInfoSet time_sorted_pending_requests_; - HashSortedRequestInfoSet hash_sorted_pending_requests_; - - // the lock caled this_lock_, since the class represent collection by itself. - sync_primitives::Lock this_lock_; - }; + private: + TimevalStruct start_; + TimevalStruct end_; + uint32_t app_id_; +}; +/** +* @brief Structure used in std algorithms to determine amount of request +* during time scale for application in defined hmi level +*/ +struct HMILevelTimeScale { + HMILevelTimeScale(const TimevalStruct& start, + const TimevalStruct& end, + const uint32_t& app_id, + const mobile_apis::HMILevel::eType& hmi_level) + : start_(start), end_(end), app_id_(app_id), hmi_level_(hmi_level) {} + + bool operator()(RequestInfoPtr setEntry) { + if (!setEntry.valid()) { + return false; + } - /** - * @brief Structure used in std algorithms to determine amount of request - * during time scale - */ - struct TimeScale { - TimeScale(const TimevalStruct& start, - const TimevalStruct& end, - const uint32_t& app_id) - : start_(start), - end_(end), - app_id_(app_id) {} - - bool operator()(RequestInfoPtr setEntry) { - if (!setEntry.valid()) { - return false; - } - - if (setEntry->app_id() != app_id_) { - return false; - } - - if (date_time::DateTime::getmSecs(setEntry->start_time()) - < date_time::DateTime::getmSecs(start_) || - date_time::DateTime::getmSecs(setEntry->start_time()) - > date_time::DateTime::getmSecs(end_)) { - return false; - } - - return true; + if (setEntry->app_id() != app_id_) { + return false; } - private: - TimevalStruct start_; - TimevalStruct end_; - uint32_t app_id_; - }; + if (setEntry->hmi_level() != hmi_level_) { + return false; + } - /** - * @brief Structure used in std algorithms to determine amount of request - * during time scale for application in defined hmi level - */ - struct HMILevelTimeScale { - HMILevelTimeScale(const TimevalStruct& start, - const TimevalStruct& end, - const uint32_t& app_id, - const mobile_apis::HMILevel::eType& hmi_level) - : start_(start), - end_(end), - app_id_(app_id), - hmi_level_(hmi_level) {} - - bool operator()(RequestInfoPtr setEntry) { - if (!setEntry.valid()) { - return false; - } - - if (setEntry->app_id() != app_id_) { - return false; - } - - if (setEntry->hmi_level() != hmi_level_) { - return false; - } - - if (date_time::DateTime::getSecs(setEntry->start_time()) - < date_time::DateTime::getSecs(start_) || - date_time::DateTime::getSecs(setEntry->start_time()) - > date_time::DateTime::getSecs(end_)) { - return false; - } - - return true; + if (date_time::DateTime::getSecs(setEntry->start_time()) < + date_time::DateTime::getSecs(start_) || + date_time::DateTime::getSecs(setEntry->start_time()) > + date_time::DateTime::getSecs(end_)) { + return false; } - private: - TimevalStruct start_; - TimevalStruct end_; - uint32_t app_id_; - mobile_apis::HMILevel::eType hmi_level_; - }; + return true; + } + + private: + TimevalStruct start_; + TimevalStruct end_; + uint32_t app_id_; + mobile_apis::HMILevel::eType hmi_level_; +}; } // namespace request_controller |