void peer_connection::send_queueable_message(std::unique_ptr<queued_message>&& message_to_send) { VERIFY_CORRECT_THREAD(); _total_queued_messages_size += message_to_send->get_size_in_queue(); _queued_messages.emplace(std::move(message_to_send)); if (_total_queued_messages_size > GRAPHENE_NET_MAXIMUM_QUEUED_MESSAGES_IN_BYTES) { elog("send queue exceeded maximum size of ${max} bytes (current size ${current} bytes)", ("max", GRAPHENE_NET_MAXIMUM_QUEUED_MESSAGES_IN_BYTES)("current", _total_queued_messages_size)); try { close_connection(); } catch (const fc::exception& e) { elog("Caught error while closing connection: ${exception}", ("exception", e)); } return; } if( _send_queued_messages_done.valid() && _send_queued_messages_done.canceled() ) FC_THROW_EXCEPTION(fc::exception, "Attempting to send a message on a connection that is being shut down"); if (!_send_queued_messages_done.valid() || _send_queued_messages_done.ready()) { dlog("peer_connection::send_message() is firing up send_queued_message_task"); _send_queued_messages_done = fc::async([this](){ send_queued_messages_task(); }, "send_queued_messages_task"); } else dlog("peer_connection::send_message() doesn't need to fire up send_queued_message_task, it's already running"); }
void peer_connection::send_message( const message& message_to_send ) { _queued_messages.emplace(queued_message(message_to_send)); _total_queued_messages_size += message_to_send.size; if (_total_queued_messages_size > BTS_NET_MAXIMUM_QUEUED_MESSAGES_IN_BYTES) { elog("send queue exceeded maximum size of ${max} bytes (current size ${current} bytes)", ("max", BTS_NET_MAXIMUM_QUEUED_MESSAGES_IN_BYTES)("current", _total_queued_messages_size)); try { close_connection(); } catch (const fc::exception& e) { elog("Caught error while closing connection: ${exception}", ("exception", e)); } return; } if( _send_queued_messages_done.valid() && _send_queued_messages_done.canceled() ) FC_THROW_EXCEPTION(fc::exception, "Attempting to send a message on a connection that is being shut down"); if (!_send_queued_messages_done.valid() || _send_queued_messages_done.ready()) _send_queued_messages_done = fc::async([this](){ send_queued_messages_task(); }, "send_queued_messages_task"); }