AlexaClientSDK  1.26.0
A cross-platform, modular SDK for interacting with the Alexa Voice Service
Requester.h
Go to the documentation of this file.
1 /*
2  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License").
5  * You may not use this file except in compliance with the License.
6  * A copy of the License is located at
7  *
8  * http://aws.amazon.com/apache2.0/
9  *
10  * or in the "license" file accompanying this file. This file is distributed
11  * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
12  * express or implied. See the License for the specific language governing
13  * permissions and limitations under the License.
14  */
15 
16 #ifndef ACSDKASSETMANAGER_SRC_REQUESTER_H_
17 #define ACSDKASSETMANAGER_SRC_REQUESTER_H_
18 
20 #include <mutex>
21 #include <string>
22 
23 #include "RequesterMetadata.h"
24 #include "Resource.h"
25 #include "StorageManager.h"
29 
30 namespace alexaClientSDK {
31 namespace acsdkAssets {
32 namespace manager {
33 
34 class RequesterFactory;
35 
41 class Requester
44  , public std::enable_shared_from_this<Requester> {
45 public:
50  static std::chrono::milliseconds START_TIME_OFFSET;
51 
55  virtual ~Requester();
56 
62  virtual bool download() = 0;
63 
67  inline size_t deleteAndCleanup() {
68  std::unique_lock<std::mutex> lock(m_eventMutex);
69  return deleteAndCleanupLocked(lock);
70  }
71 
78  void handleUpdate(bool accept);
79 
83  inline std::string name() const {
84  return m_metadata->getRequest()->getSummary();
85  }
86 
90  inline const std::shared_ptr<commonInterfaces::ArtifactRequest>& getArtifactRequest() const {
91  return m_metadata->getRequest();
92  }
93 
99  auto state = static_cast<commonInterfaces::State>(m_stateProperty->getValue());
100  return state;
101  }
103  }
104 
108  inline std::chrono::milliseconds getLastUsed() const {
109  return m_metadata->getLastUsed();
110  }
111 
117  return static_cast<commonInterfaces::Priority>(m_priorityProperty->getValue());
118  }
120  }
121 
125  inline bool isDownloaded() {
126  return m_resource != nullptr;
127  }
128 
134  std::string getArtifactPath();
135 
139  virtual void setPriority(commonInterfaces::Priority newPriority);
140 
142  bool validateWriteRequest(const std::string& name, int newValue) override;
143 
145  std::string functionToBeInvoked(const std::string& Name) override;
146 
147 protected:
148  Requester(
149  std::shared_ptr<StorageManager> storageManager,
150  std::shared_ptr<commonInterfaces::AmdCommunicationInterface> communicationHandler,
151  std::shared_ptr<RequesterMetadata> metadata,
152  std::string metadataFilePath);
153 
159  bool initializeFromStorage();
160 
167 
171  void deregisterCommunicationHandlerPropsLocked(std::unique_lock<std::mutex>& lock);
172 
176  inline void setStateLocked(commonInterfaces::State newState) {
177  if (nullptr == m_metadata) {
178  return;
179  }
180 
182  m_stateProperty->setValue(static_cast<int>(newState));
183  }
184  }
185 
190 
191  void notifyUpdateIsAvailableLocked(std::unique_lock<std::mutex>& lock);
192 
193  bool handleAcquiredResourceLocked(std::unique_lock<std::mutex>& lock, const std::shared_ptr<Resource>& newResource);
194  void handleDownloadFailureLocked(std::unique_lock<std::mutex>& lock);
195  void handleUpdateLocked(std::unique_lock<std::mutex>& lock, bool accept);
196 
200  virtual size_t deleteAndCleanupLocked(std::unique_lock<std::mutex>& lock);
201 
202 protected:
203  // Manager used to free up space when needed.
204  const std::shared_ptr<StorageManager> m_storageManager;
205  // Communication Property Handler used for communicating with external processes.
206  const std::shared_ptr<commonInterfaces::AmdCommunicationInterface> m_communicationHandler;
207 
208  // Artifact metadata containing request and other information for this artifact.
209  const std::shared_ptr<RequesterMetadata> m_metadata;
210  // Path to the directory where this artifact is stored.
211  const std::string m_metadataFilePath;
212 
213  // A storage manager space reservation token that (while alive) holds a certain space in storage manager
214  std::unique_ptr<StorageManager::ReservationToken> m_storageReservationToken;
215  // Pointer to the actual resource used for this request.
216  std::shared_ptr<Resource> m_resource;
217  // Pointer to the resource that will be held for updating this request.
218  std::shared_ptr<Resource> m_pendingUpdate;
219  // Total number of update notifications sent for this request
221  // The Timer used to schedule updates.
223 
224  // Mutex for synchronizing event states.
225  std::mutex m_eventMutex;
226 
227  // Are our communication Handler properties registered or not?
229 
230  // Allow the requester factory to create requesters
232 
233  // Communication Property for state.
234  std::shared_ptr<acsdkCommunicationInterfaces::CommunicationProperty<int>> m_stateProperty;
235  // Communication Property for priority
236  std::shared_ptr<acsdkCommunicationInterfaces::CommunicationProperty<int>> m_priorityProperty;
237  // Communication Property for Updates
238  std::shared_ptr<acsdkCommunicationInterfaces::CommunicationProperty<std::string>> m_updateProperty;
239 };
240 
241 } // namespace manager
242 } // namespace acsdkAssets
243 } // namespace alexaClientSDK
244 
245 #endif // ACSDKASSETMANAGER_SRC_REQUESTER_H_
Timer.h
alexaClientSDK::acsdkAssets::manager::Requester::setStateLocked
void setStateLocked(commonInterfaces::State newState)
Definition: Requester.h:176
alexaClientSDK::acsdkAssets::manager::Requester::Requester
Requester(std::shared_ptr< StorageManager > storageManager, std::shared_ptr< commonInterfaces::AmdCommunicationInterface > communicationHandler, std::shared_ptr< RequesterMetadata > metadata, std::string metadataFilePath)
Definition: Requester.cpp:59
alexaClientSDK::acsdkAssets::manager::Requester::getArtifactPath
std::string getArtifactPath()
Definition: Requester.cpp:221
StorageManager.h
alexaClientSDK::acsdkAssets::commonInterfaces::State
State
Definition: State.h:35
alexaClientSDK::acsdkAssets::manager::Requester::START_TIME_OFFSET
static std::chrono::milliseconds START_TIME_OFFSET
Definition: Requester.h:50
alexaClientSDK::avsCommon::utils::timing::Timer
Definition: Timer.h:39
alexaClientSDK::acsdkAssets::manager::Requester::deleteAndCleanup
size_t deleteAndCleanup()
Definition: Requester.h:67
alexaClientSDK::acsdkAssets::manager::Requester::validateWriteRequest
bool validateWriteRequest(const std::string &name, int newValue) override
Override of the CommunicationPropertyValidatorInterface.
Definition: Requester.cpp:299
alexaClientSDK::acsdkAssets::manager::Requester::notifyUpdateIsAvailableLocked
void notifyUpdateIsAvailableLocked(std::unique_lock< std::mutex > &lock)
Definition: Requester.cpp:242
alexaClientSDK::acsdkAssets::manager::Requester::m_updateNotificationsSent
int m_updateNotificationsSent
Definition: Requester.h:220
alexaClientSDK::acsdkAssets::manager::Requester::getPriority
commonInterfaces::Priority getPriority() const
Definition: Requester.h:115
alexaClientSDK::acsdkAssets::manager::Requester::handleUpdateLocked
void handleUpdateLocked(std::unique_lock< std::mutex > &lock, bool accept)
Definition: Requester.cpp:272
alexaClientSDK::acsdkAssets::manager::Requester::m_communicationHandlerRegistered
bool m_communicationHandlerRegistered
Definition: Requester.h:228
alexaClientSDK::acsdkAssets::manager::Requester::m_timer
alexaClientSDK::avsCommon::utils::timing::Timer m_timer
Definition: Requester.h:222
alexaClientSDK::acsdkAssets::manager::Requester::getState
commonInterfaces::State getState() const
Definition: Requester.h:97
Resource.h
alexaClientSDK::acsdkAssets::manager::Requester::RequesterFactory
friend RequesterFactory
Definition: Requester.h:231
alexaClientSDK::acsdkAssets::manager::Requester::m_metadataFilePath
const std::string m_metadataFilePath
Definition: Requester.h:211
alexaClientSDK::acsdkAssets::manager::Requester::m_metadata
const std::shared_ptr< RequesterMetadata > m_metadata
Definition: Requester.h:209
alexaClientSDK::acsdkAssets::manager::Requester::getArtifactRequest
const std::shared_ptr< commonInterfaces::ArtifactRequest > & getArtifactRequest() const
Definition: Requester.h:90
alexaClientSDK::acsdkAssets::manager::Requester::m_storageManager
const std::shared_ptr< StorageManager > m_storageManager
Definition: Requester.h:204
alexaClientSDK::acsdkAssets::manager::Requester::getLastUsed
std::chrono::milliseconds getLastUsed() const
Definition: Requester.h:108
alexaClientSDK::acsdkAssets::manager::Requester::m_eventMutex
std::mutex m_eventMutex
Definition: Requester.h:225
RequesterMetadata.h
alexaClientSDK::acsdkAssets::manager::Requester::initializeFromStorage
bool initializeFromStorage()
Definition: Requester.cpp:77
alexaClientSDK::acsdkAssets::manager::Requester::m_priorityProperty
std::shared_ptr< acsdkCommunicationInterfaces::CommunicationProperty< int > > m_priorityProperty
Definition: Requester.h:236
alexaClientSDK
Whether or not curl logs should be emitted.
Definition: AVSConnectionManager.h:36
alexaClientSDK::acsdkAssets::manager::Requester::m_stateProperty
std::shared_ptr< acsdkCommunicationInterfaces::CommunicationProperty< int > > m_stateProperty
Definition: Requester.h:234
alexaClientSDK::acsdkAssets::manager::Requester::isDownloaded
bool isDownloaded()
Definition: Requester.h:125
alexaClientSDK::acsdkAssets::manager::Requester::~Requester
virtual ~Requester()
Definition: Requester.cpp:72
alexaClientSDK::acsdkCommunicationInterfaces::FunctionInvokerInterface
Definition: FunctionInvokerInterface.h:30
alexaClientSDK::acsdkAssets::manager::Requester::setPriority
virtual void setPriority(commonInterfaces::Priority newPriority)
Definition: Requester.cpp:213
alexaClientSDK::acsdkAssets::commonInterfaces::Priority
Priority
Definition: Priority.h:27
AMD.h
alexaClientSDK::acsdkAssets::manager::Requester::registerCommunicationHandlerPropsLocked
bool registerCommunicationHandlerPropsLocked()
Definition: Requester.cpp:88
alexaClientSDK::acsdkAssets::manager::Requester::m_pendingUpdate
std::shared_ptr< Resource > m_pendingUpdate
Definition: Requester.h:218
alexaClientSDK::acsdkAssets::manager::Requester::name
std::string name() const
Definition: Requester.h:83
alexaClientSDK::acsdkAssets::manager::Requester::handleUpdate
void handleUpdate(bool accept)
Definition: Requester.cpp:267
alexaClientSDK::acsdkAssets::commonInterfaces::State::INVALID
@ INVALID
alexaClientSDK::acsdkAssets::commonInterfaces::Priority::UNUSED
@ UNUSED
alexaClientSDK::acsdkAssets::manager::Requester::m_storageReservationToken
std::unique_ptr< StorageManager::ReservationToken > m_storageReservationToken
Definition: Requester.h:214
alexaClientSDK::acsdkAssets::manager::Requester
Definition: Requester.h:41
alexaClientSDK::acsdkCommunicationInterfaces::CommunicationPropertyValidatorInterface
Definition: CommunicationPropertyValidatorInterface.h:30
AmdCommunicationInterface.h
alexaClientSDK::acsdkAssets::manager::Requester::m_updateProperty
std::shared_ptr< acsdkCommunicationInterfaces::CommunicationProperty< std::string > > m_updateProperty
Definition: Requester.h:238
alexaClientSDK::acsdkAssets::manager::Requester::download
virtual bool download()=0
alexaClientSDK::acsdkAssets::manager::Requester::handleAcquiredResourceLocked
bool handleAcquiredResourceLocked(std::unique_lock< std::mutex > &lock, const std::shared_ptr< Resource > &newResource)
Definition: Requester.cpp:176
alexaClientSDK::acsdkAssets::manager::Requester::m_resource
std::shared_ptr< Resource > m_resource
Definition: Requester.h:216
alexaClientSDK::acsdkAssets::manager::Requester::updateLastUsedTimestampLocked
void updateLastUsedTimestampLocked()
Definition: Requester.cpp:233
alexaClientSDK::acsdkAssets::manager::Requester::m_communicationHandler
const std::shared_ptr< commonInterfaces::AmdCommunicationInterface > m_communicationHandler
Definition: Requester.h:206
alexaClientSDK::acsdkAssets::manager::Requester::functionToBeInvoked
std::string functionToBeInvoked(const std::string &Name) override
Override of the InvokeFunctionInterface.
Definition: Requester.cpp:314
alexaClientSDK::acsdkAssets::manager::Requester::deregisterCommunicationHandlerPropsLocked
void deregisterCommunicationHandlerPropsLocked(std::unique_lock< std::mutex > &lock)
Definition: Requester.cpp:129
alexaClientSDK::acsdkAssets::manager::Requester::handleDownloadFailureLocked
void handleDownloadFailureLocked(std::unique_lock< std::mutex > &lock)
Definition: Requester.cpp:204
State.h
alexaClientSDK::acsdkAssets::manager::Requester::deleteAndCleanupLocked
virtual size_t deleteAndCleanupLocked(std::unique_lock< std::mutex > &lock)
Definition: Requester.cpp:151

AlexaClientSDK 1.26.0 - Copyright 2016-2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0