3 #include <jsonrpccpp/server/abstractserverconnector.h>
7 #include <boost/asio/strand.hpp>
8 #include <boost/beast/core.hpp>
9 #include <boost/beast/websocket.hpp>
27 namespace beast = boost::beast;
28 namespace http = beast::http;
29 namespace websocket = beast::websocket;
33 class WsSession :
public std::enable_shared_from_this<WsSession> {
36 explicit WsSession(tcp::socket&& socket,
addr_t node_addr, std::shared_ptr<WsServer> ws_server)
44 void close(
bool normal =
true);
48 void on_read(beast::error_code ec, std::size_t bytes_transferred);
59 bool is_normal(
const beast::error_code& ec)
const;
60 void on_write(beast::error_code ec, std::size_t bytes_transferred);
67 websocket::stream<beast::tcp_stream>
ws_;
85 class WsServer :
public std::enable_shared_from_this<WsServer>,
public jsonrpc::AbstractServerConnector {
87 WsServer(boost::asio::io_context& ioc, tcp::endpoint endpoint,
addr_t node_addr);
112 void on_accept(beast::error_code ec, tcp::socket socket);
Definition: FixedHash.h:35
DagBlock class is a DAG block class which main data is a list of transaction hashes included in the b...
Definition: dag_block.hpp:16
Definition: ws_server.hpp:85
void on_accept(beast::error_code ec, tcp::socket socket)
Definition: ws_server.cpp:255
WsServer(boost::asio::io_context &ioc, tcp::endpoint endpoint, addr_t node_addr)
Definition: ws_server.cpp:201
virtual ~WsServer()
Definition: ws_server.cpp:239
void newEthBlock(const ::taraxa::final_chain::BlockHeader &payload, const TransactionHashes &trx_hashes)
Definition: ws_server.cpp:304
WsServer & operator=(const WsServer &)=delete
void newDagBlockFinalized(const blk_hash_t &blk, uint64_t period)
Definition: ws_server.cpp:288
const addr_t node_addr_
Definition: ws_server.hpp:121
virtual bool StopListening()
Definition: ws_server.hpp:108
void newDagBlock(const DagBlock &blk)
Definition: ws_server.cpp:281
boost::shared_mutex sessions_mtx_
Definition: ws_server.hpp:118
virtual bool StartListening()
Definition: ws_server.hpp:107
uint32_t numberOfSessions()
Definition: ws_server.cpp:325
WsServer(const WsServer &)=delete
void newPillarBlockData(const pillar_chain::PillarBlockData &pillar_block_data)
Definition: ws_server.cpp:318
virtual std::shared_ptr< WsSession > createSession(tcp::socket &&socket)=0
void newPbftBlockExecuted(const PbftBlock &sche_blk, const std::vector< blk_hash_t > &finalized_dag_blk_hashes)
Definition: ws_server.cpp:295
void do_accept()
Definition: ws_server.cpp:250
void newPendingTransaction(const trx_hash_t &trx_hash)
Definition: ws_server.cpp:311
LOG_OBJECTS_DEFINE boost::asio::io_context & ioc_
Definition: ws_server.hpp:114
tcp::acceptor acceptor_
Definition: ws_server.hpp:115
WsServer & operator=(WsServer &&)=delete
std::atomic< bool > stopped_
Definition: ws_server.hpp:117
void run()
Definition: ws_server.cpp:237
WsServer(WsServer &&)=delete
std::list< std::shared_ptr< WsSession > > sessions
Definition: ws_server.hpp:116
Definition: ws_server.hpp:33
void on_read(beast::error_code ec, std::size_t bytes_transferred)
Definition: ws_server.cpp:42
void processAsync()
Definition: ws_server.cpp:59
bool is_normal(const beast::error_code &ec) const
Definition: ws_server.cpp:194
virtual std::string processRequest(const std::string_view &request)=0
void newEthBlock(const ::taraxa::final_chain::BlockHeader &payload, const TransactionHashes &trx_hashes)
Definition: ws_server.cpp:100
beast::flat_buffer read_buffer_
Definition: ws_server.hpp:69
void writeAsync(std::string &&message)
Definition: ws_server.cpp:75
int new_dag_blocks_subscription_
Definition: ws_server.hpp:72
std::atomic< int > subscription_id_
Definition: ws_server.hpp:70
websocket::stream< beast::tcp_stream > ws_
Definition: ws_server.hpp:67
int new_dag_block_finalized_subscription_
Definition: ws_server.hpp:74
int new_pillar_block_subscription_
Definition: ws_server.hpp:76
bool is_closed() const
Definition: ws_server.hpp:58
void newDagBlockFinalized(const blk_hash_t &blk, uint64_t period)
Definition: ws_server.cpp:132
std::atomic< bool > closed_
Definition: ws_server.hpp:78
bool include_pillar_block_signatures
Definition: ws_server.hpp:77
void newDagBlock(const DagBlock &blk)
Definition: ws_server.cpp:114
void do_read()
Definition: ws_server.cpp:37
void writeImpl(std::string &&message)
Definition: ws_server.cpp:89
void close(bool normal=true)
Definition: ws_server.cpp:187
void newPillarBlockData(const pillar_chain::PillarBlockData &pillar_block_data)
Definition: ws_server.cpp:161
void newPbftBlockExecuted(const Json::Value &payload)
Definition: ws_server.cpp:147
boost::asio::strand< boost::asio::any_io_executor > write_strand_
Definition: ws_server.hpp:68
int new_heads_subscription_
Definition: ws_server.hpp:71
std::weak_ptr< WsServer > ws_server_
Definition: ws_server.hpp:79
int new_pbft_block_executed_subscription_
Definition: ws_server.hpp:75
void newPendingTransaction(const trx_hash_t &trx_hash)
Definition: ws_server.cpp:174
void on_accept(beast::error_code ec)
Definition: ws_server.cpp:27
void on_write(beast::error_code ec, std::size_t bytes_transferred)
void run()
Definition: ws_server.cpp:14
int new_transactions_subscription_
Definition: ws_server.hpp:73
WsSession(tcp::socket &&socket, addr_t node_addr, std::shared_ptr< WsServer > ws_server)
Definition: ws_server.hpp:36
The PbftBlock class is a PBFT block class that includes PBFT block hash, previous PBFT block hash,...
Definition: pbft_block.hpp:21
Definition: pillar_block.hpp:143
#define LOG_OBJECTS_DEFINE
Definition: logger.hpp:60
#define LOG_OBJECTS_CREATE(channel)
Definition: logger.hpp:76
std::hash for asio::adress
Definition: FixedHash.h:483
Definition: http_processor.hpp:11
boost::asio::ip::tcp tcp
Definition: ws_server.hpp:30
std::vector< trx_hash_t > TransactionHashes
Definition: transaction.hpp:82