rippled
Loading...
Searching...
No Matches
InfoSub.h
1#pragma once
2
3#include <xrpl/basics/CountedObject.h>
4#include <xrpl/json/json_value.h>
5#include <xrpl/protocol/Book.h>
6#include <xrpl/protocol/ErrorCodes.h>
7#include <xrpl/resource/Consumer.h>
8#include <xrpl/server/Manifest.h>
9
10namespace xrpl {
11
12// Operations that clients may wish to perform against the network
13// Master operational handler, server sequencer, network tracker
14
15class InfoSubRequest : public CountedObject<InfoSubRequest>
16{
17public:
19
20 virtual ~InfoSubRequest() = default;
21
22 virtual Json::Value
23 doClose() = 0;
24 virtual Json::Value
25 doStatus(Json::Value const&) = 0;
26};
27
30class InfoSub : public CountedObject<InfoSub>
31{
32public:
34
35 // VFALCO TODO Standardize on the names of weak / strong pointer type
36 // aliases.
38
40
42
43public:
46 class Source
47 {
48 public:
49 virtual ~Source() = default;
50
51 // For some reason, these were originally called "rt"
52 // for "real time". They actually refer to whether
53 // you get transactions as they occur or once their
54 // results are confirmed
55 virtual void
56 subAccount(ref ispListener, hash_set<AccountID> const& vnaAccountIDs, bool realTime) = 0;
57
58 // for normal use, removes from InfoSub and server
59 virtual void
60 unsubAccount(ref isplistener, hash_set<AccountID> const& vnaAccountIDs, bool realTime) = 0;
61
62 // for use during InfoSub destruction
63 // Removes only from the server
64 virtual void
65 unsubAccountInternal(std::uint64_t uListener, hash_set<AccountID> const& vnaAccountIDs, bool realTime) = 0;
66
72 virtual error_code_i
73 subAccountHistory(ref ispListener, AccountID const& account) = 0;
74
83 virtual void
84 unsubAccountHistory(ref ispListener, AccountID const& account, bool historyOnly) = 0;
85
86 virtual void
87 unsubAccountHistoryInternal(std::uint64_t uListener, AccountID const& account, bool historyOnly) = 0;
88
89 // VFALCO TODO Document the bool return value
90 virtual bool
91 subLedger(ref ispListener, Json::Value& jvResult) = 0;
92 virtual bool
93 unsubLedger(std::uint64_t uListener) = 0;
94
95 virtual bool
96 subBookChanges(ref ispListener) = 0;
97 virtual bool
99
100 virtual bool
101 subManifests(ref ispListener) = 0;
102 virtual bool
104 virtual void
106
107 virtual bool
108 subServer(ref ispListener, Json::Value& jvResult, bool admin) = 0;
109 virtual bool
111
112 virtual bool
113 subBook(ref ispListener, Book const&) = 0;
114 virtual bool
115 unsubBook(std::uint64_t uListener, Book const&) = 0;
116
117 virtual bool
118 subTransactions(ref ispListener) = 0;
119 virtual bool
121
122 virtual bool
123 subRTTransactions(ref ispListener) = 0;
124 virtual bool
126
127 virtual bool
128 subValidations(ref ispListener) = 0;
129 virtual bool
131
132 virtual bool
133 subPeerStatus(ref ispListener) = 0;
134
135 virtual bool
137 virtual void
139
140 virtual bool
141 subConsensus(ref ispListener) = 0;
142 virtual bool
144
145 // VFALCO TODO Remove
146 // This was added for one particular partner, it
147 // "pushes" subscription data to a particular URL.
148 //
149 virtual pointer
150 findRpcSub(std::string const& strUrl) = 0;
151 virtual pointer
152 addRpcSub(std::string const& strUrl, ref rspEntry) = 0;
153 virtual bool
154 tryRemoveRpcSub(std::string const& strUrl) = 0;
155 };
156
157public:
158 InfoSub(Source& source);
159 InfoSub(Source& source, Consumer consumer);
160
161 virtual ~InfoSub();
162
163 Consumer&
164 getConsumer();
165
166 virtual void
167 send(Json::Value const& jvObj, bool broadcast) = 0;
168
170 getSeq();
171
172 void
173 onSendEmpty();
174
175 void
176 insertSubAccountInfo(AccountID const& account, bool rt);
177
178 void
179 deleteSubAccountInfo(AccountID const& account, bool rt);
180
181 // return false if already subscribed to this account
182 bool
183 insertSubAccountHistory(AccountID const& account);
184
185 void
186 deleteSubAccountHistory(AccountID const& account);
187
188 void
189 clearRequest();
190
191 void
193
195 getRequest();
196
197 void
198 setApiVersion(unsigned int apiVersion);
199
200 unsigned int
201 getApiVersion() const noexcept;
202
203protected:
204 std::mutex mLock;
205
206private:
212 std::uint64_t mSeq;
214 unsigned int apiVersion_ = 0;
215
216 static int
218 {
219 static std::atomic<std::uint64_t> id(0);
220 return ++id;
221 }
222};
223
224} // namespace xrpl
Represents a JSON value.
Definition json_value.h:130
Specifies an order book.
Definition Book.h:16
Tracks the number of instances of an object.
virtual Json::Value doClose()=0
virtual Json::Value doStatus(Json::Value const &)=0
virtual ~InfoSubRequest()=default
Abstracts the source of subscription data.
Definition InfoSub.h:47
virtual void unsubAccountHistoryInternal(std::uint64_t uListener, AccountID const &account, bool historyOnly)=0
virtual bool unsubRTTransactions(std::uint64_t uListener)=0
virtual bool subTransactions(ref ispListener)=0
virtual void pubManifest(Manifest const &)=0
virtual bool unsubConsensus(std::uint64_t uListener)=0
virtual bool unsubTransactions(std::uint64_t uListener)=0
virtual void unsubAccountInternal(std::uint64_t uListener, hash_set< AccountID > const &vnaAccountIDs, bool realTime)=0
virtual bool unsubServer(std::uint64_t uListener)=0
virtual error_code_i subAccountHistory(ref ispListener, AccountID const &account)=0
subscribe an account's new transactions and retrieve the account's historical transactions
virtual bool tryRemoveRpcSub(std::string const &strUrl)=0
virtual bool unsubBookChanges(std::uint64_t uListener)=0
virtual void unsubAccountHistory(ref ispListener, AccountID const &account, bool historyOnly)=0
unsubscribe an account's transactions
virtual bool subPeerStatus(ref ispListener)=0
virtual bool subConsensus(ref ispListener)=0
virtual void subAccount(ref ispListener, hash_set< AccountID > const &vnaAccountIDs, bool realTime)=0
virtual bool subBook(ref ispListener, Book const &)=0
virtual bool subValidations(ref ispListener)=0
virtual ~Source()=default
virtual bool subRTTransactions(ref ispListener)=0
virtual bool unsubLedger(std::uint64_t uListener)=0
virtual bool unsubBook(std::uint64_t uListener, Book const &)=0
virtual bool unsubPeerStatus(std::uint64_t uListener)=0
virtual bool subBookChanges(ref ispListener)=0
virtual bool unsubManifests(std::uint64_t uListener)=0
virtual pointer addRpcSub(std::string const &strUrl, ref rspEntry)=0
virtual void pubPeerStatus(std::function< Json::Value(void)> const &)=0
virtual bool subServer(ref ispListener, Json::Value &jvResult, bool admin)=0
virtual bool subManifests(ref ispListener)=0
virtual bool unsubValidations(std::uint64_t uListener)=0
virtual bool subLedger(ref ispListener, Json::Value &jvResult)=0
virtual pointer findRpcSub(std::string const &strUrl)=0
virtual void unsubAccount(ref isplistener, hash_set< AccountID > const &vnaAccountIDs, bool realTime)=0
Manages a client's subscription to data feeds.
Definition InfoSub.h:31
Source & m_source
Definition InfoSub.h:208
void setRequest(std::shared_ptr< InfoSubRequest > const &req)
Definition InfoSub.cpp:107
void clearRequest()
Definition InfoSub.cpp:101
bool insertSubAccountHistory(AccountID const &account)
Definition InfoSub.cpp:87
static int assign_id()
Definition InfoSub.h:217
Consumer & getConsumer()
Definition InfoSub.cpp:48
void setApiVersion(unsigned int apiVersion)
Definition InfoSub.cpp:119
virtual ~InfoSub()
Definition InfoSub.cpp:24
void insertSubAccountInfo(AccountID const &account, bool rt)
Definition InfoSub.cpp:65
hash_set< AccountID > accountHistorySubscriptions_
Definition InfoSub.h:213
hash_set< AccountID > normalSubscriptions_
Definition InfoSub.h:210
std::uint64_t mSeq
Definition InfoSub.h:212
hash_set< AccountID > realTimeSubscriptions_
Definition InfoSub.h:209
std::mutex mLock
Definition InfoSub.h:204
void deleteSubAccountInfo(AccountID const &account, bool rt)
Definition InfoSub.cpp:76
void deleteSubAccountHistory(AccountID const &account)
Definition InfoSub.cpp:94
unsigned int getApiVersion() const noexcept
Definition InfoSub.cpp:125
Consumer m_consumer
Definition InfoSub.h:207
unsigned int apiVersion_
Definition InfoSub.h:214
virtual void send(Json::Value const &jvObj, bool broadcast)=0
void onSendEmpty()
Definition InfoSub.cpp:60
std::uint64_t getSeq()
Definition InfoSub.cpp:54
std::shared_ptr< InfoSubRequest > const & getRequest()
Definition InfoSub.cpp:113
std::shared_ptr< InfoSubRequest > request_
Definition InfoSub.h:211
An endpoint that consumes resources.
Definition Consumer.h:16
STL namespace.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
error_code_i
Definition ErrorCodes.h:20