blob: 2c69b6af7df52a52478ce6a68f09e2fba78f350f [file] [log] [blame]
#ifndef THIRD_PARTY_MILOTIC_EXTERNAL_CC_HFT_SUBSCRIPTION_STORE_H_
#define THIRD_PARTY_MILOTIC_EXTERNAL_CC_HFT_SUBSCRIPTION_STORE_H_
#include <cstddef>
#include <memory>
#include <utility>
#include "absl/base/thread_annotations.h"
#include "absl/container/flat_hash_map.h"
#include "absl/status/status.h"
#include "absl/synchronization/mutex.h"
#include "nlohmann/json.hpp"
#include "subscription_params.pb.h"
namespace milotic_hft {
class SubscriptionStore;
// A subscription to a data source.
class Subscription {
public:
Subscription(size_t subscription_id,
std::unique_ptr<SubscriptionParams> subscription_params,
SubscriptionStore* subscription_store)
: subscription_id_(subscription_id),
subscription_params_(std::move(subscription_params)),
subscription_store_(subscription_store) {}
virtual ~Subscription() = 0;
virtual const SubscriptionParams& GetParams() const = 0;
virtual void Cancel() = 0;
virtual nlohmann::json ToJson() const = 0;
private:
const size_t subscription_id_;
const std::unique_ptr<SubscriptionParams> subscription_params_;
SubscriptionStore* subscription_store_;
};
// A store of subscriptions.
class SubscriptionStore {
public:
virtual ~SubscriptionStore() = 0;
virtual absl::Status AddSubscription(
std::unique_ptr<Subscription> subscription) = 0;
virtual absl::Status RemoveSubscription(size_t subscription_id) = 0;
virtual nlohmann::json ToJson() const = 0;
private:
absl::Mutex mutex_;
absl::flat_hash_map<size_t, std::unique_ptr<Subscription>> subscriptions_
ABSL_GUARDED_BY(mutex_);
};
} // namespace milotic_hft
#endif // THIRD_PARTY_MILOTIC_EXTERNAL_CC_HFT_SUBSCRIPTION_STORE_H_