All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
HttpAsyncModelLoader.h
1 // Copyright eeGeo Ltd (2012-2014), All Rights Reserved
2 
3 #pragma once
4 
5 #include "Types.h"
6 #include "Rendering.h"
7 #include "AsyncTexturing.h"
8 #include "AsyncModels.h"
9 #include "Helpers.h"
10 #include "Rendering.h"
11 #include "Web.h"
12 #include "WebLoadRequestCompletionCallback.h"
13 #include <string>
14 #include <deque>
15 #include <vector>
16 #include <map>
17 #include "PendingWebRequestsContainer.h"
18 
19 namespace Eegeo
20 {
21  namespace Io
22  {
23  namespace AsyncModels
24  {
25  typedef std::vector<IAsyncModel*> TIAsyncModels;
26 
28  {
29  public:
31  Web::IWebLoadRequestFactory& webLoadRequestFactory,
32  Eegeo::Helpers::IHttpCache& httpCache,
33  Rendering::SceneModels::SceneModel* pPlaceholderModel,
35  );
36 
37  IAsyncModel& CreateLoadRequest(const std::string& modelUrl, IAsyncModelObserver* pObserver, bool destroyObserverOnCompletion);
38  void Cancel(IAsyncModel& modelToRelease);
39 
40  void IssueNextLoadRequest();
41  bool HasPendingLoadRequests() const;
42  bool IsStreaming() const;
43 
44  private:
45  Web::IWebLoadRequestFactory& m_webLoadRequestFactory;
46  Eegeo::Helpers::IHttpCache& m_httpCache;
47 
48  Rendering::SceneModels::SceneModel* m_pPlaceholderModel;
49  Rendering::SceneModels::SceneModelFactory& m_sceneModelFactory;
50 
51  typedef std::deque<HttpAsyncModel*> TModelDeque;
52  TModelDeque m_pendingLoads;
53  int m_inFlightLoadCount;
54 
56  Web::PendingWebRequestsContainer m_pendingWebRequestsContainer;
57 
58  HttpAsyncModel* CreateModel(const std::string& modelUrl, IAsyncModelObserver* pObserver, bool destroyObserverOnCompletion);
59  void StartLoadingModel(HttpAsyncModel* pModel);
60  void OnWebLoadComplete(Web::IWebResponse& webResponse);
61  void Evict(IAsyncModel* pModel);
62  void FinaliseModelLoad(HttpAsyncModel* pAsyncModel, const std::vector<Byte>& buffer);
63 
64  typedef std::map<IAsyncModel*, Web::IWebLoadRequest*> TModelToRequest;
65  TModelToRequest m_requestByModel;
66  };
67  }
68  }
69 }