diff options
Diffstat (limited to 'nsframework/notification_persistent_service/server/src/ns_npp_handlelist.cpp')
-rwxr-xr-x | nsframework/notification_persistent_service/server/src/ns_npp_handlelist.cpp | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/nsframework/notification_persistent_service/server/src/ns_npp_handlelist.cpp b/nsframework/notification_persistent_service/server/src/ns_npp_handlelist.cpp new file mode 100755 index 0000000..c9e88a8 --- /dev/null +++ b/nsframework/notification_persistent_service/server/src/ns_npp_handlelist.cpp @@ -0,0 +1,149 @@ +/* + * @copyright Copyright (c) 2016-2020 TOYOTA MOTOR CORPORATION. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +////////////////////////////////////////////////////////////////////////////////////////////////// +/// \defgroup tag_NS_NPPService +/// \ingroup tag_NS_NPPService +/// +////////////////////////////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////////////////////////////// +/// \ingroup tag_NS_NPPService +/// \brief This class holds the message queue handles for notification subscribers +/// +/// This is a singleton class which holds the message queue handles for notification subscribers. +/// This will ensure that NS_NPPService will hold only one handle per subscriber. +////////////////////////////////////////////////////////////////////////////////////////////////// +#include <utility> +#include <string> +#include "ns_npp_handlelist.h" +#include "ns_npp_notificationpersistentservicelog.h" + +// define static member of class CHandleList +CHandleList *CHandleList::m_psHandleList = NULL; + +//////////////////////////////////////////////////////////////////////////////////////////////////// +/// CHandleList +/// Class Constructor +//////////////////////////////////////////////////////////////////////////////////////////////////// +CHandleList::CHandleList() { + FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); + + FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +/// CHandleList +/// Class Destructor +//////////////////////////////////////////////////////////////////////////////////////////////////// +CHandleList::~CHandleList() { // LCOV_EXCL_START 14: Resident process, global instance not released + AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert + FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); + + FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); +} +// LCOV_EXCL_STOP + +//////////////////////////////////////////////////////////////////////////////////////////////////// +/// GetHandleList +/// This function is used to get the singleton instance of class. +//////////////////////////////////////////////////////////////////////////////////////////////////// +CHandleList *CHandleList::GetHandleList() { + FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); + + // create the instance of class + if (NULL == m_psHandleList) { + FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "Creating handle list."); // LCOV_EXCL_BR_LINE 15:marco defined in "native_service/ns_logger_if.h" + m_psHandleList = new(std::nothrow) CHandleList(); // LCOV_EXCL_BR_LINE 11: unexpected branch + } + + FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); + return m_psHandleList; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +/// ReleaseHandleList +/// This function is used to release the instance of class. +//////////////////////////////////////////////////////////////////////////////////////////////////// +EFrameworkunifiedStatus CHandleList::ReleaseHandleList() { // LCOV_EXCL_START 100: not used + AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert + EFrameworkunifiedStatus l_estatus = eFrameworkunifiedStatusOK; + FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); + + if (NULL != m_psHandleList) { + delete m_psHandleList; + m_psHandleList = NULL; + } else { + l_estatus = eFrameworkunifiedStatusNullPointer; + } + + FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); + return l_estatus; +} +// LCOV_EXCL_STOP + +//////////////////////////////////////////////////////////////////////////////////////////////// +/// AddHandleInList +/// Add pair of subscriber name and corresponding handle in map. +//////////////////////////////////////////////////////////////////////////////////////////////// +EFrameworkunifiedStatus CHandleList::AddHandleInList(std::string f_csubscribername, HANDLE f_hmqhandle) { + EFrameworkunifiedStatus l_estatus = eFrameworkunifiedStatusOK; + HandleListRetStatus_Type l_prRetValue; + FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); + + l_prRetValue = m_mHandleList.insert(make_pair(f_csubscribername, f_hmqhandle)); + if (false == l_prRetValue.second) { + l_estatus = eFrameworkunifiedStatusDuplicate; + FRAMEWORKUNIFIEDLOG(ZONE_NPP_INFO, __FUNCTION__, "Handle exists in list for %s.", f_csubscribername.c_str()); + } else { + FRAMEWORKUNIFIEDLOG(ZONE_NPP_INFO, __FUNCTION__, "Handle added in list for %s.", f_csubscribername.c_str()); // LCOV_EXCL_BR_LINE 15:marco defined in "native_service/ns_logger_if.h" + } + + + FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); + return l_estatus; +} + + +//////////////////////////////////////////////////////////////////////////////////////////////// +/// RemoveHandleFromList +/// Remove handle for subscriber from the list. +//////////////////////////////////////////////////////////////////////////////////////////////// +EFrameworkunifiedStatus CHandleList::RemoveHandleFromList(std::string f_csubscribername) { // LCOV_EXCL_START 100: not used + AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert + // TODO(my_username): Implementation of this function. + // NOTE: Right now this feature is not required. Let the NS_NPPService hold one handle for + // each subscriber, even if all the notifications are unsubscribed by subscriber. + return eFrameworkunifiedStatusOK; +} +// LCOV_EXCL_STOP + +//////////////////////////////////////////////////////////////////////////////////////////////// +/// GetSubscriberMqHandle +/// Get the message queue handle of a subscriber. +//////////////////////////////////////////////////////////////////////////////////////////////// +HANDLE CHandleList::GetSubscriberMqHandle(std::string f_csubscribername) { + HANDLE l_hMqHandle = NULL; + HandleList_Type::iterator l_itHandleList; + FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); + + l_itHandleList = m_mHandleList.find(f_csubscribername); + if (l_itHandleList != m_mHandleList.end()) { + l_hMqHandle = l_itHandleList->second; + } + FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); + return l_hMqHandle; +} |