TARAXA
Loading...
Searching...
No Matches
ws_session.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <json/value.h>
4#include <jsonrpccpp/server/abstractserverconnector.h>
5
6#include <atomic>
7#include <boost/asio/strand.hpp>
8#include <boost/beast/core.hpp>
9#include <boost/beast/websocket.hpp>
10#include <cstdlib>
11#include <memory>
12#include <string>
13
14#include "common/types.hpp"
15#include "final_chain/data.hpp"
16#include "logger/logging.hpp"
18
19namespace beast = boost::beast; // from <boost/beast.hpp>
20namespace websocket = beast::websocket; // from <boost/beast/websocket.hpp>
21using tcp = boost::asio::ip::tcp; // from <boost/asio/ip/tcp.hpp>
22
23namespace taraxa::net {
24
25class WsServer;
26class WsSession : public std::enable_shared_from_this<WsSession> {
27 public:
28 // Take ownership of the socket
29 explicit WsSession(tcp::socket&& socket, std::shared_ptr<WsServer> ws_server)
30 : ws_(std::move(socket)),
31 ws_server_(ws_server),
32 subscriptions_(std::bind(&WsSession::do_write, this, std::placeholders::_1)),
33 logger_(logger::Logging::get().CreateChannelLogger("WS_SESSION")),
34 write_strand_(boost::asio::make_strand(ws_.get_executor())) {}
35
36 // Start the asynchronous operation
37 void run();
38 void close(bool normal = true);
39 bool is_closed() const;
40
41 virtual std::string processRequest(const std::string_view& request) = 0;
42
43 void newEthBlock(const Json::Value& payload);
44 void newDagBlock(const Json::Value& blk);
45 void newDagBlockFinalized(const Json::Value& payload);
46 void newPbftBlockExecuted(const Json::Value& payload);
47 void newPendingTransaction(const Json::Value& payload);
48 void newPillarBlockData(const Json::Value& payload);
49 void newLogs(const final_chain::BlockHeader& header, TransactionHashes trx_hashes,
50 const TransactionReceipts& receipts);
51
52 private:
53 static bool is_normal(const beast::error_code& ec);
54 void on_close(beast::error_code ec);
55 void on_accept(beast::error_code ec);
56 void do_read();
57 void on_read(beast::error_code ec, std::size_t bytes_transferred);
58 void write(std::string&& message);
59
60 protected:
61 void handleRequest();
62 void do_write(std::string&& message);
63
64 websocket::stream<beast::tcp_stream> ws_;
65 std::atomic<int> subscription_id_ = 0;
66 std::weak_ptr<WsServer> ws_server_;
69
70 private:
71 boost::asio::strand<boost::asio::any_io_executor> write_strand_;
72 beast::flat_buffer read_buffer_;
73 std::atomic<bool> closed_ = false;
74 std::string ip_;
75};
76} // namespace taraxa::net
Definition subscriptions.hpp:107
Definition ws_session.hpp:26
void on_read(beast::error_code ec, std::size_t bytes_transferred)
Definition ws_server.cpp:69
void newPendingTransaction(const Json::Value &payload)
Definition ws_server.cpp:185
virtual std::string processRequest(const std::string_view &request)=0
beast::flat_buffer read_buffer_
Definition ws_session.hpp:72
std::atomic< int > subscription_id_
Definition ws_session.hpp:65
void on_close(beast::error_code ec)
Definition ws_server.cpp:154
websocket::stream< beast::tcp_stream > ws_
Definition ws_session.hpp:64
std::string ip_
Definition ws_session.hpp:74
bool is_closed() const
Definition ws_server.cpp:166
void newDagBlockFinalized(const Json::Value &payload)
Definition ws_server.cpp:173
std::atomic< bool > closed_
Definition ws_session.hpp:73
void do_read()
Definition ws_server.cpp:64
Subscriptions subscriptions_
Definition ws_session.hpp:67
void newLogs(const final_chain::BlockHeader &header, TransactionHashes trx_hashes, const TransactionReceipts &receipts)
Definition ws_server.cpp:189
void write(std::string &&message)
Definition ws_server.cpp:134
void close(bool normal=true)
Definition ws_server.cpp:146
logger::Logger logger_
Definition ws_session.hpp:68
void newPbftBlockExecuted(const Json::Value &payload)
Definition ws_server.cpp:177
boost::asio::strand< boost::asio::any_io_executor > write_strand_
Definition ws_session.hpp:71
void newEthBlock(const Json::Value &payload)
Definition ws_server.cpp:168
void newPillarBlockData(const Json::Value &payload)
Definition ws_server.cpp:181
std::weak_ptr< WsServer > ws_server_
Definition ws_session.hpp:66
WsSession(tcp::socket &&socket, std::shared_ptr< WsServer > ws_server)
Definition ws_session.hpp:29
void on_accept(beast::error_code ec)
Definition ws_server.cpp:52
void newDagBlock(const Json::Value &blk)
Definition ws_server.cpp:169
void run()
Definition ws_server.cpp:16
static bool is_normal(const beast::error_code &ec)
Definition ws_server.cpp:162
void handleRequest()
Definition ws_server.cpp:86
void do_write(std::string &&message)
Definition ws_server.cpp:116
Definition data.hpp:40
Definition Log.h:104
std::hash for asio::adress
Definition FixedHash.h:483
std::shared_ptr< spdlog::logger > Logger
Definition logging.hpp:12
Definition http_processor.hpp:11
std::vector< TransactionReceipt > TransactionReceipts
Definition receipt.hpp:35
std::vector< trx_hash_t > TransactionHashes
Definition transaction.hpp:87
boost::asio::ip::tcp tcp
Definition ws_session.hpp:21