@@ -42,20 +42,20 @@ namespace fc::api::rpc {
42
42
const std::string &target,
43
43
const std::string &token) {
44
44
boost::system::error_code ec;
45
- socket. next_layer ().connect ({boost::asio::ip::make_address (host),
45
+ socket-> next_layer ().connect ({boost::asio::ip::make_address (host),
46
46
boost::lexical_cast<uint16_t >(port)},
47
47
ec);
48
48
if (ec) {
49
49
return ec;
50
50
}
51
51
if (not token.empty ()) {
52
- socket. set_option (
52
+ socket-> set_option (
53
53
boost::beast::websocket::stream_base::decorator ([&](auto &req) {
54
54
req.set (boost::beast::http::field::authorization,
55
55
" Bearer " + token);
56
56
}));
57
57
}
58
- socket. handshake (host, target, ec);
58
+ socket-> handshake (host, target, ec);
59
59
client_data = ClientData{host, port, target, token};
60
60
if (ec) {
61
61
return ec;
@@ -92,10 +92,10 @@ namespace fc::api::rpc {
92
92
}
93
93
94
94
void Client::_flush () {
95
- if (!writing && !write_queue.empty () && ! reconnecting){
95
+ if (!writing && !write_queue.empty () && not reconnecting){
96
96
auto &[id, buffer] = write_queue.front ();
97
97
writing = true ;
98
- socket. async_write (boost::asio::buffer (buffer.data (), buffer.size ()),
98
+ socket-> async_write (boost::asio::buffer (buffer.data (), buffer.size ()),
99
99
[=](auto &&ec, auto ) {
100
100
std::lock_guard lock{mutex};
101
101
if (ec) {
@@ -109,7 +109,7 @@ namespace fc::api::rpc {
109
109
}
110
110
111
111
void Client::_read () {
112
- socket. async_read (buffer, [=](auto &&ec, auto ) {
112
+ socket-> async_read (buffer, [=](auto &&ec, auto ) {
113
113
if (ec) {
114
114
std::lock_guard lock{mutex};
115
115
return _error (ec);
@@ -189,10 +189,13 @@ namespace fc::api::rpc {
189
189
}
190
190
191
191
void Client::reconnect (int counter, std::chrono::milliseconds wait) {
192
- if (reconnecting.exchange (true )) return ;
192
+ if (reconnecting) return ;
193
+ reconnecting = true ;
193
194
logger_->info (" Starting reconnect to {}:{}" , client_data.host , client_data.port );
194
195
for (int i = 0 ; i < counter; i++){
195
- std::this_thread::sleep_for (wait*(i+1 ));
196
+ std::this_thread::sleep_for (wait);
197
+ socket.reset ();
198
+ socket.emplace (io);
196
199
auto res = connect (client_data.host ,
197
200
client_data.port ,
198
201
client_data.target ,
@@ -201,7 +204,7 @@ namespace fc::api::rpc {
201
204
break ;
202
205
}
203
206
}
204
- reconnecting. store ( false ) ;
207
+ reconnecting = false ;
205
208
logger_->info (" Reconnect to {}:{} was successful" , client_data.host , client_data.port );
206
209
_flush ();
207
210
}
0 commit comments