TARAXA
Loading...
Searching...
No Matches
subscriptions.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <json/json.h>
4
5#include <functional>
6#include <list>
7#include <map>
8#include <memory>
9
11
21
22namespace taraxa::net {
23
25 public:
26 Subscription(int id) : id_(id) {}
27 virtual ~Subscription() = default;
28 virtual SubscriptionType getType() const = 0;
29 int getId() const { return id_; }
30 virtual std::string processPayload(Json::Value payload) const = 0;
31
32 protected:
33 int id_;
34};
35
37 public:
38 explicit HeadsSubscription(int id) : Subscription(id) {}
40
41 SubscriptionType getType() const override { return type; }
42 std::string processPayload(Json::Value payload) const override;
43};
44
46 public:
47 explicit DagBlocksSubscription(int id, bool hash_only = false) : Subscription(id), full_data_(hash_only) {}
49 SubscriptionType getType() const override { return type; }
50 std::string processPayload(Json::Value payload) const override;
51
52 private:
53 bool full_data_ = false;
54};
55
57 public:
58 explicit TransactionsSubscription(int id) : Subscription(id) {}
60 SubscriptionType getType() const override { return type; }
61 std::string processPayload(Json::Value payload) const override;
62};
63
65 public:
68 SubscriptionType getType() const override { return type; }
69 std::string processPayload(Json::Value payload) const override;
70};
71
73 public:
74 explicit PbftBlockExecutedSubscription(int id, bool full_block = false) : Subscription(id), full_block_(full_block) {}
76 SubscriptionType getType() const override { return type; }
77 std::string processPayload(Json::Value payload) const override;
78
79 private:
80 bool full_block_ = false;
81};
82
84 public:
85 explicit PillarBlockSubscription(int id, bool include_signatures = false)
86 : Subscription(id), include_signatures_(include_signatures) {}
88 SubscriptionType getType() const override { return type; }
89 std::string processPayload(Json::Value payload) const override;
90
91 private:
92 bool include_signatures_ = false;
93};
94
96 public:
97 explicit LogsSubscription(int id, rpc::eth::LogFilter&& filter) : Subscription(id), filter_(filter) {}
99 SubscriptionType getType() const override { return type; }
100 std::string processPayload(Json::Value payload) const override;
102
103 private:
105};
106
108 public:
109 Subscriptions(std::function<void(std::string&&)> send) : send_(send) {}
110 int addSubscription(std::shared_ptr<Subscription> subscription);
111 bool removeSubscription(int id);
112 void process(SubscriptionType type, const Json::Value& payload);
113 void processLogs(const final_chain::BlockHeader& header, TransactionHashes trx_hashes,
114 const TransactionReceipts& receipts);
115
116 private:
117 std::function<void(std::string&&)> send_;
118 std::map<uint64_t, std::shared_ptr<Subscription>> subscriptions_;
119 std::map<SubscriptionType, std::list<uint64_t>> subscriptions_by_type_;
121};
122} // namespace taraxa::net
Definition subscriptions.hpp:64
static constexpr SubscriptionType type
Definition subscriptions.hpp:67
SubscriptionType getType() const override
Definition subscriptions.hpp:68
std::string processPayload(Json::Value payload) const override
Definition subscriptions.cpp:85
DagBlockFinalizedSubscription(int id)
Definition subscriptions.hpp:66
Definition subscriptions.hpp:45
static constexpr SubscriptionType type
Definition subscriptions.hpp:48
DagBlocksSubscription(int id, bool hash_only=false)
Definition subscriptions.hpp:47
SubscriptionType getType() const override
Definition subscriptions.hpp:49
bool full_data_
Definition subscriptions.hpp:53
std::string processPayload(Json::Value payload) const override
Definition subscriptions.cpp:74
Definition subscriptions.hpp:36
static constexpr SubscriptionType type
Definition subscriptions.hpp:39
HeadsSubscription(int id)
Definition subscriptions.hpp:38
SubscriptionType getType() const override
Definition subscriptions.hpp:41
std::string processPayload(Json::Value payload) const override
Definition subscriptions.cpp:70
Definition subscriptions.hpp:95
rpc::eth::LogFilter getFilter() const
Definition subscriptions.hpp:101
SubscriptionType getType() const override
Definition subscriptions.hpp:99
rpc::eth::LogFilter filter_
Definition subscriptions.hpp:104
std::string processPayload(Json::Value payload) const override
Definition subscriptions.cpp:103
static constexpr SubscriptionType type
Definition subscriptions.hpp:98
LogsSubscription(int id, rpc::eth::LogFilter &&filter)
Definition subscriptions.hpp:97
Definition subscriptions.hpp:72
static constexpr SubscriptionType type
Definition subscriptions.hpp:75
SubscriptionType getType() const override
Definition subscriptions.hpp:76
std::string processPayload(Json::Value payload) const override
Definition subscriptions.cpp:89
PbftBlockExecutedSubscription(int id, bool full_block=false)
Definition subscriptions.hpp:74
bool full_block_
Definition subscriptions.hpp:80
Definition subscriptions.hpp:83
PillarBlockSubscription(int id, bool include_signatures=false)
Definition subscriptions.hpp:85
std::string processPayload(Json::Value payload) const override
Definition subscriptions.cpp:96
SubscriptionType getType() const override
Definition subscriptions.hpp:88
static constexpr SubscriptionType type
Definition subscriptions.hpp:87
bool include_signatures_
Definition subscriptions.hpp:92
Definition subscriptions.hpp:24
virtual SubscriptionType getType() const =0
virtual ~Subscription()=default
virtual std::string processPayload(Json::Value payload) const =0
Subscription(int id)
Definition subscriptions.hpp:26
int getId() const
Definition subscriptions.hpp:29
int id_
Definition subscriptions.hpp:33
Definition subscriptions.hpp:107
void process(SubscriptionType type, const Json::Value &payload)
Definition subscriptions.cpp:31
Subscriptions(std::function< void(std::string &&)> send)
Definition subscriptions.hpp:109
std::mutex subscriptions_mutex_
Definition subscriptions.hpp:120
std::map< uint64_t, std::shared_ptr< Subscription > > subscriptions_
Definition subscriptions.hpp:118
std::map< SubscriptionType, std::list< uint64_t > > subscriptions_by_type_
Definition subscriptions.hpp:119
bool removeSubscription(int id)
Definition subscriptions.cpp:18
int addSubscription(std::shared_ptr< Subscription > subscription)
Definition subscriptions.cpp:11
void processLogs(const final_chain::BlockHeader &header, TransactionHashes trx_hashes, const TransactionReceipts &receipts)
Definition subscriptions.cpp:36
std::function< void(std::string &&)> send_
Definition subscriptions.hpp:117
Definition subscriptions.hpp:56
static constexpr SubscriptionType type
Definition subscriptions.hpp:59
SubscriptionType getType() const override
Definition subscriptions.hpp:60
std::string processPayload(Json::Value payload) const override
Definition subscriptions.cpp:81
TransactionsSubscription(int id)
Definition subscriptions.hpp:58
Definition data.hpp:40
Definition http_processor.hpp:11
std::vector< TransactionReceipt > TransactionReceipts
Definition receipt.hpp:35
std::vector< trx_hash_t > TransactionHashes
Definition transaction.hpp:87
Definition LogFilter.hpp:8
SubscriptionType
Definition subscriptions.hpp:12