| 12345678910111213141516171819202122232425262728293031323334353637383940 | #pragma once#include <atomic>      // or std::atomic#include <functional>  // for function#include <memory>      // for shared_ptr#include <string>      // for stringnamespace cspot {struct Context;class AccessKeyFetcher { public:  AccessKeyFetcher(std::shared_ptr<cspot::Context> ctx);  /**  * @brief Checks if key is expired  * @returns true when currently held access key is not valid  */  bool isExpired();  /**  * @brief Fetches a new access key  * @remark In case the key is expired, this function blocks until a refresh is done.  * @returns access key  */  std::string getAccessKey();  /**  * @brief Forces a refresh of the access key  */  void updateAccessKey(); private:  std::shared_ptr<cspot::Context> ctx;  std::atomic<bool> keyPending = false;  std::string accessKey;  long long int expiresAt;};}  // namespace cspot
 |