All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
InteriorMetaDataService.h
1 #pragma once
2 
3 #include "Interiors.h"
4 #include "IInteriorMetaDataService.h"
5 #include "Types.h"
6 #include "Web.h"
7 #include "ICallback.h"
8 #include "WebLoadRequestCompletionCallback.h"
9 
10 #include <string>
11 #include <unordered_map>
12 
13 namespace Eegeo
14 {
15  namespace Resources
16  {
17  namespace Interiors
18  {
19  namespace MetaData
20  {
22  {
23  public:
25  Eegeo::Web::IWebLoadRequestFactory& webLoadRequestFactory,
26  const Web::ApiTokenModel& apiTokenModel,
27  const std::string& indoorMapsApiBaseUrl,
28  IInteriorMetaDataModelAddedEvent& interiorMetaDataModelAddedEvent,
29  IInteriorMetaDataModelRemovedEvent& interiorMetaDataModelRemovedEvent,
30  IInteriorMetaDataRequestCancelledEvent& interiorMetaDataRequestCancelledEvent,
31  IInteriorMetaDataEvictionHandler& interiorMetaDataEvictionHandler
32  );
33 
34  ~InteriorMetaDataService() override;
35 
36  bool Exists(const std::string& indoorMapId) const override;
37 
38  void Request(const std::string& indoorMapId) override;
39 
40  bool IsRequesting(const std::string& indoorMapId) const override;
41 
42  bool TryRemove(const std::string& indoorMapId) override;
43 
44  bool TryGetUserData(const std::string& indoorMapId, std::string& out_userData) const override;
45 
46  bool TryGetAccessPermission(const std::string& indoorMapId, AccessPermission::Type& out_accessPermission) const override;
47 
48  bool TryGetLocation(const std::string& indoorMapId, Space::LatLong& out_location) const override;
49 
50  IInteriorMetaDataModelAddedEvent& GetInteriorMetaDataModelAddedEvent() const override;
51 
52  IInteriorMetaDataModelRemovedEvent& GetInteriorMetaDataModelRemovedEvent() const override;
53 
54  IInteriorMetaDataRequestCancelledEvent& GetInteriorMetaDataRequestCancelledEvent() const override;
55 
56 
57  private:
58  typedef std::unordered_map<Web::TWebRequestId, Web::IWebLoadRequest*> TIdToWebLoadRequest;
59 
60  void WebRequestCompleted(Eegeo::Web::IWebResponse& webResponse);
61  void FetchInteriorMetaData(const std::string& indoorMapId);
62  void CleanUpRequest(const Web::TWebRequestId webRequestId);
63 
64  void OnInteriorMetaDataModelEvicted(const std::string& indoorMapId);
65 
66  void Put(InteriorMetaDataModel* pInteriorMetaDataModel);
67  void Delete(const std::string& indoorMapId);
68  TIdToWebLoadRequest::const_iterator FindPendingRequestForIndoorMapId(const std::string& indoorMapId) const;
69 
70  Web::IWebLoadRequestFactory& m_webLoadRequestFactory;
71  const Web::ApiTokenModel& m_apiTokenModel;
72  const std::string m_indoorMapsApiBaseUrl;
73  IInteriorMetaDataModelAddedEvent& m_interiorMetaDataModelAddedEvent;
74  IInteriorMetaDataModelRemovedEvent& m_interiorMetaDataModelRemovedEvent;
75  IInteriorMetaDataRequestCancelledEvent& m_interiorMetaDataRequestCancelledEvent;
76  IInteriorMetaDataEvictionHandler& m_interiorMetaDataEvictionHandler;
77 
79  TIdToWebLoadRequest m_pendingWebRequests;
80  std::unordered_map<std::string, InteriorMetaDataModel*> m_store;
81 
82  Helpers::TCallback1<InteriorMetaDataService, const std::string> m_interiorMetaDataModelEvictedHandler;
83  };
84  }
85  }
86  }
87 }