67 observers_.push_back(std::move(observer));
75 auto it = std::find(observers_.begin(), observers_.end(), observer);
76 if (it != observers_.end()) {
90 return observers_.size();
95 for (
const auto& observer : observers_) {
96 observer->onPriceLevelUpdate(update);
102 for (
const auto& observer : observers_) {
103 observer->onOrderUpdate(update);
109 for (
const auto& observer : observers_) {
110 observer->onTrade(trade);
116 for (
const auto& observer : observers_) {
117 observer->onTopOfBookUpdate(tob);
123 for (
const auto& observer : observers_) {
124 observer->onSnapshotBegin(symbol, seq_num, timestamp);
130 for (
const auto& observer : observers_) {
131 observer->onSnapshotEnd(symbol, seq_num, timestamp);
136 std::vector<std::shared_ptr<IOrderBookObserver>> observers_;
Base interface for orderbook observers Observers receive callbacks for orderbook events.
virtual ~IOrderBookObserver()=default
virtual void onSnapshotEnd(SymbolId symbol, uint64_t seq_num, Timestamp timestamp)
Called when snapshot processing completes.
virtual void onOrderUpdate(const OrderUpdate &update)
Called when an individual order is updated (L3 event)
virtual void onTopOfBookUpdate(const TopOfBook &tob)
Called when top-of-book changes.
virtual void onTrade(const Trade &trade)
Called when a trade occurs.
virtual void onPriceLevelUpdate(const PriceLevelUpdate &update)
Called when a price level is updated (L2 event)
virtual void onSnapshotBegin(SymbolId symbol, uint64_t seq_num, Timestamp timestamp)
Called when snapshot processing begins Followed by multiple onPriceLevelUpdate() or onOrderUpdate() c...
Observer manager for notifying multiple observers Uses type erasure to support both concept-based and...
~ObserverManager()=default
void notifyPriceLevelUpdate(const PriceLevelUpdate &update) const
Notify all observers of price level update.
void notifyTrade(const Trade &trade) const
Notify all observers of trade.
std::size_t observerCount() const noexcept
Get number of observers.
ObserverManager(ObserverManager &&) noexcept=default
ObserverManager & operator=(const ObserverManager &)=delete
void clearObservers() noexcept
Clear all observers.
bool removeObserver(const std::shared_ptr< IOrderBookObserver > &observer)
Remove an observer.
ObserverManager()=default
ObserverManager(const ObserverManager &)=delete
void notifyTopOfBookUpdate(const TopOfBook &tob) const
Notify all observers of top-of-book update.
void notifySnapshotEnd(SymbolId symbol, uint64_t seq_num, Timestamp timestamp) const
Notify all observers that snapshot processing is complete.
void notifySnapshotBegin(SymbolId symbol, uint64_t seq_num, Timestamp timestamp) const
Notify all observers that snapshot processing is beginning.
void notifyOrderUpdate(const OrderUpdate &update) const
Notify all observers of order update.
#define SLICK_NAMESPACE_END
#define SLICK_NAMESPACE_BEGIN
uint16_t SymbolId
Symbol identifier - can be hash or sequential ID.
uint64_t Timestamp
Timestamp in nanoseconds since epoch.
Level 3 order update event Note: quantity = 0 implies the order should be deleted.
Level 2 price level update event Note: quantity = 0 implies the price level should be deleted.
Top-of-book snapshot - best bid and ask.
Trade event - represents an executed trade.