nx_server_plugin_sdk  1.0
Server Plugin SDK
device_archive.h
1 // Copyright 2018-present Network Optix, Inc. Licensed under MPL 2.0: www.mozilla.org/MPL/2.0/
2 
3 #pragma once
4 
5 #include <map>
6 #include <string>
7 #include <chrono>
8 
9 #include <nx/sdk/cloud_storage/helpers/data_list.h>
10 #include <nx/sdk/cloud_storage/i_async_operation_handler.h>
11 #include <nx/sdk/helpers/list.h>
12 #include <nx/sdk/helpers/ref_countable.h>
13 
14 namespace nx::sdk::cloud_storage {
15 
16 enum class ChunkOperation
17 {
18  add,
19  remove,
20  removeInterval,
21 };
22 
26 class MediaChunk: public IMediaChunk
27 {
28 public:
29  MediaChunk(int64_t startTimeMs, int64_t durationMs, const char* bucketUrl);
30 
31  virtual int64_t startTimeMs() const override;
32  virtual int64_t durationMs() const override;
33  virtual const char* locationUrl() const override;
34 
35  std::string toString() const;
36  bool operator<(const MediaChunk& other) const;
37 
38 private:
39  int64_t m_startTimeMs = -1;
40  int64_t m_durationMs = -1;
41  std::string m_bucketUrl;
42 };
43 
44 std::string toString(const std::vector<MediaChunk>& chunks);
45 
46 using IndexData = std::map<ChunkOperation, std::vector<MediaChunk>>;
47 using DeviceData = std::map<int /*streamIndex*/, IndexData>;
48 using CloudChunkData = std::map<std::string, DeviceData>;
49 
51  public nx::sdk::RefCountable<IMediaChunkList>,
52  public DataList<MediaChunk>
53 {
54 public:
55  MediaChunkList(const std::vector<MediaChunk>& chunks);
56 
57  virtual void goToBeginning() const override;
58  virtual void next() const override;
59  virtual bool atEnd() const override;
60  virtual const IMediaChunk* get() const override;
61 
62 private:
63  using Base = DataList<MediaChunk>;
64 };
65 
66 class IndexArchive: public nx::sdk::RefCountable<IIndexArchive>
67 {
68 public:
69  IndexArchive(int streamIndex, const IndexData& indexData);
70 
71  virtual const IMediaChunkList* addedChunks() const override;
72  virtual const IMediaChunkList* removedChunks() const override;
73  virtual const IMediaChunkList* intervalsToRemove() const override;
74  virtual int streamIndex() const override;
75 
76 private:
77  const int m_streamIndex;
78  Ptr<IMediaChunkList> m_addedChunks;
79  Ptr<IMediaChunkList> m_removedChunks;
80  Ptr<IMediaChunkList> m_intervalsToRemove;
81 };
82 
83 class DeviceArchive: public nx::sdk::RefCountable<IDeviceArchive>
84 {
85 public:
87  IDeviceAgent* deviceAgent,
88  const DeviceData& deviceData);
89 
90  virtual IList<IIndexArchive>* indexArchive() override;
91  virtual IDeviceAgent* deviceAgent() const override;
92 
93 private:
94  IDeviceAgent* m_deviceAgent;
95  const DeviceData& m_data;
96  List<IIndexArchive> m_indexArchiveList;
97 };
98 
99 } // namespace nx::sdk::cloud_storage
Definition: i_async_operation_handler.h:28
Definition: device_archive.h:83
Definition: device_archive.h:50
Definition: device_archive.h:66
Definition: ptr.h:18
Definition: i_async_operation_handler.h:16
Definition: i_device_agent.h:21
Definition: list.h:15
Definition: device_archive.h:26
Definition: algorithm.cpp:9
Definition: data_list.h:10
Definition: i_list.h:10
Definition: ref_countable.h:83