aboutsummaryrefslogtreecommitdiff
path: root/zenserver/objectstore/objectstore.h
diff options
context:
space:
mode:
Diffstat (limited to 'zenserver/objectstore/objectstore.h')
-rw-r--r--zenserver/objectstore/objectstore.h48
1 files changed, 48 insertions, 0 deletions
diff --git a/zenserver/objectstore/objectstore.h b/zenserver/objectstore/objectstore.h
new file mode 100644
index 000000000..eaab57794
--- /dev/null
+++ b/zenserver/objectstore/objectstore.h
@@ -0,0 +1,48 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+#pragma once
+
+#include <zenhttp/httpserver.h>
+#include <atomic>
+#include <filesystem>
+#include <mutex>
+
+namespace zen {
+
+class HttpRouterRequest;
+
+struct ObjectStoreConfig
+{
+ struct BucketConfig
+ {
+ std::string Name;
+ std::filesystem::path Directory;
+ };
+
+ std::filesystem::path RootDirectory;
+ std::vector<BucketConfig> Buckets;
+ uint16_t ServerPort{1337};
+};
+
+class HttpObjectStoreService final : public zen::HttpService
+{
+public:
+ HttpObjectStoreService(ObjectStoreConfig Cfg);
+ virtual ~HttpObjectStoreService();
+
+ virtual const char* BaseUri() const override;
+ virtual void HandleRequest(zen::HttpServerRequest& Request) override;
+
+private:
+ void Inititalize();
+ std::filesystem::path GetBucketDirectory(std::string_view BucketName);
+ void GetBlob(zen::HttpRouterRequest& Request);
+ void PutBlob(zen::HttpRouterRequest& Request);
+
+ ObjectStoreConfig m_Cfg;
+ std::mutex BucketsMutex;
+ HttpRequestRouter m_Router;
+ std::atomic_uint64_t TotalBytesServed{0};
+};
+
+} // namespace zen