| #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_ |