OpenCBDC Transaction Processor
Loading...
Searching...
No Matches
peer.hpp
Go to the documentation of this file.
1// Copyright (c) 2021 MIT Digital Currency Initiative,
2// Federal Reserve Bank of Boston
3// Distributed under the MIT software license, see the accompanying
4// file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
6#ifndef OPENCBDC_TX_SRC_NETWORK_PEER_H_
7#define OPENCBDC_TX_SRC_NETWORK_PEER_H_
8
9#include "tcp_socket.hpp"
11
12#include <atomic>
13#include <thread>
14
15namespace cbdc::network {
21 class peer {
22 public:
26 = std::function<void(std::shared_ptr<cbdc::buffer>)>;
27
38 peer(std::unique_ptr<tcp_socket> sock,
40 bool attempt_reconnect);
41
43 ~peer();
45 peer(const peer&) = delete;
46 auto operator=(const peer&) -> peer& = delete;
48 peer(peer&&) = delete;
49 auto operator=(peer&&) -> peer& = delete;
50
56 void send(const std::shared_ptr<cbdc::buffer>& data);
57
60 void shutdown();
61
64 [[nodiscard]] auto connected() const -> bool;
65
66 private:
67 std::unique_ptr<tcp_socket> m_sock;
68
69 blocking_queue<std::shared_ptr<cbdc::buffer>> m_send_queue;
70
71 std::thread m_recv_thread;
72 std::thread m_send_thread;
73
74 std::thread m_reconnect_thread;
75 std::mutex m_reconnect_mut;
76 std::condition_variable m_reconnect_cv;
77 bool m_reconnect{false};
78 bool m_attempt_reconnect{};
79
80 std::atomic_bool m_running{true};
81 std::atomic_bool m_shut_down{false};
82
83 callback_type m_recv_cb;
84
85 void do_send();
86
87 void do_recv();
88
89 void do_reconnect();
90
91 void close();
92
93 void signal_reconnect();
94 };
95}
96
97#endif
Thread-safe producer-consumer FIFO queue supporting multiple concurrent producers and consumers.
Buffer to store and retrieve byte data.
Definition buffer.hpp:15
Maintains a TCP socket.
Definition peer.hpp:21
auto connected() const -> bool
Indicates whether the TCP socket is currently connected.
Definition peer.cpp:42
peer(std::unique_ptr< tcp_socket > sock, callback_type cb, bool attempt_reconnect)
Constructor.
Definition peer.cpp:12
std::function< void(std::shared_ptr< cbdc::buffer >)> callback_type
Type for the packet receipt callback function.
Definition peer.hpp:25
void send(const std::shared_ptr< cbdc::buffer > &data)
Sends buffered data.
Definition peer.cpp:27
void shutdown()
Clears any packets in the pending send queue.
Definition peer.cpp:33
~peer()
Destructor. Calls shutdown().
Definition peer.cpp:23
auto operator=(const peer &) -> peer &=delete
Wrapper for a TCP socket.