Clio  develop
The XRP Ledger API server.
Loading...
Searching...
No Matches
SubscriptionContext.hpp
1#pragma once
2
3#include "util/CoroutineGroup.hpp"
4#include "util/Taggable.hpp"
5#include "web/SubscriptionContextInterface.hpp"
6#include "web/ng/Connection.hpp"
7#include "web/ng/Error.hpp"
8#include "web/ng/impl/WsConnection.hpp"
9
10#include <boost/asio/any_io_executor.hpp>
11#include <boost/asio/spawn.hpp>
12#include <boost/signals2/variadic_signal.hpp>
13
14#include <atomic>
15#include <cstddef>
16#include <cstdint>
17#include <functional>
18#include <memory>
19#include <optional>
20#include <string>
21
22namespace web::ng {
23
30public:
35 using ErrorHandler = std::function<bool(Error const&, Connection const&)>;
36
37private:
38 std::reference_wrapper<impl::WsConnectionBase> connection_;
39 std::optional<size_t> maxSendQueueSize_;
40 util::CoroutineGroup tasksGroup_;
41 boost::asio::yield_context yield_;
42 ErrorHandler errorHandler_;
43
44 boost::signals2::signal<void(SubscriptionContextInterface*)> onDisconnect_;
45 std::atomic_bool disconnected_{false};
46 std::atomic_bool gotError_{false};
47
54 std::atomic_uint32_t apiSubversion_ = 0u;
55
56public:
68 util::TagDecoratorFactory const& factory,
69 impl::WsConnectionBase& connection,
70 std::optional<size_t> maxSendQueueSize,
71 boost::asio::yield_context yield,
72 ErrorHandler errorHandler
73 );
74
75 ~SubscriptionContext() override;
76
83 void
84 send(std::shared_ptr<std::string> message) override;
85
91 void
92 onDisconnect(OnDisconnectSlot const& slot) override;
93
98 void
99 setApiSubversion(uint32_t value) override;
100
106 uint32_t
107 apiSubversion() const override;
108
116 void
117 disconnect(boost::asio::yield_context yield);
118};
119
120} // namespace web::ng
CoroutineGroup is a helper class to manage a group of coroutines. It allows to spawn multiple corouti...
Definition CoroutineGroup.hpp:18
A factory for TagDecorator instantiation.
Definition Taggable.hpp:165
An interface to provide connection functionality for subscriptions.
Definition SubscriptionContextInterface.hpp:20
std::function< void(SubscriptionContextInterface *)> OnDisconnectSlot
Alias for on disconnect slot.
Definition SubscriptionContextInterface.hpp:35
A context of a WsBase connection for subscriptions.
Definition SubscriptionContext.hpp:20
A class representing a connection to a client.
Definition Connection.hpp:93
std::function< bool(Error const &, Connection const &)> ErrorHandler
Error handler definition. Error handler returns true if connection should be closed false otherwise.
Definition SubscriptionContext.hpp:35
void onDisconnect(OnDisconnectSlot const &slot) override
Connect a slot to onDisconnect connection signal.
Definition SubscriptionContext.cpp:68
void send(std::shared_ptr< std::string > message) override
Send message to the client.
Definition SubscriptionContext.cpp:40
void setApiSubversion(uint32_t value) override
Set the API subversion.
Definition SubscriptionContext.cpp:74
SubscriptionContext(util::TagDecoratorFactory const &factory, impl::WsConnectionBase &connection, std::optional< size_t > maxSendQueueSize, boost::asio::yield_context yield, ErrorHandler errorHandler)
Construct a new Subscription Context object.
Definition SubscriptionContext.cpp:18
uint32_t apiSubversion() const override
Get the API subversion.
Definition SubscriptionContext.cpp:80
void disconnect(boost::asio::yield_context yield)
Notify the context that related connection is disconnected and wait for all the task to complete.
Definition SubscriptionContext.cpp:86