Change signature of virtual channel::send_buffer (...)
		
	This commit is contained in:
		
					parent
					
						
							
								c7401195ab
							
						
					
				
			
			
				commit
				
					
						7b9aad9c96
					
				
			
		
					 8 changed files with 19 additions and 10 deletions
				
			
		| 
						 | 
				
			
			@ -16,8 +16,7 @@ nano::transport::channel::channel (nano::node & node_a) :
 | 
			
		|||
 | 
			
		||||
bool nano::transport::channel::send (nano::message const & message, nano::transport::traffic_type traffic_type, callback_t callback)
 | 
			
		||||
{
 | 
			
		||||
	auto buffer = message.to_shared_const_buffer ();
 | 
			
		||||
	bool sent = send_buffer (buffer, traffic_type, std::move (callback));
 | 
			
		||||
	bool sent = send_impl (message, traffic_type, std::move (callback));
 | 
			
		||||
	node.stats.inc (sent ? nano::stat::type::message : nano::stat::type::drop, to_stat_detail (message.type ()), nano::stat::dir::out, /* aggregate all */ true);
 | 
			
		||||
	return sent;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -120,7 +120,7 @@ public:
 | 
			
		|||
	std::shared_ptr<nano::node> owner () const;
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
	virtual bool send_buffer (nano::shared_const_buffer const &, nano::transport::traffic_type, callback_t) = 0;
 | 
			
		||||
	virtual bool send_impl (nano::message const &, nano::transport::traffic_type, callback_t) = 0;
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
	nano::node & node;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,8 +14,9 @@ nano::transport::fake::channel::channel (nano::node & node) :
 | 
			
		|||
/**
 | 
			
		||||
 * The send function behaves like a null device, it throws the data away and returns success.
 | 
			
		||||
 */
 | 
			
		||||
bool nano::transport::fake::channel::send_buffer (nano::shared_const_buffer const & buffer, nano::transport::traffic_type traffic_type, nano::transport::channel::callback_t callback)
 | 
			
		||||
bool nano::transport::fake::channel::send_impl (nano::message const & message, nano::transport::traffic_type traffic_type, nano::transport::channel::callback_t callback)
 | 
			
		||||
{
 | 
			
		||||
	auto buffer = message.to_shared_const_buffer ();
 | 
			
		||||
	auto size = buffer.size ();
 | 
			
		||||
	if (callback)
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -50,7 +50,7 @@ namespace transport
 | 
			
		|||
			}
 | 
			
		||||
 | 
			
		||||
		protected:
 | 
			
		||||
			bool send_buffer (nano::shared_const_buffer const &, nano::transport::traffic_type, nano::transport::channel::callback_t) override;
 | 
			
		||||
			bool send_impl (nano::message const &, nano::transport::traffic_type, nano::transport::channel::callback_t) override;
 | 
			
		||||
 | 
			
		||||
		private:
 | 
			
		||||
			nano::endpoint endpoint;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,8 +18,10 @@ nano::transport::inproc::channel::channel (nano::node & node, nano::node & desti
 | 
			
		|||
 * Send the buffer to the peer and call the callback function when done. The call never fails.
 | 
			
		||||
 * Note that the inbound message visitor will be called before the callback because it is called directly whereas the callback is spawned in the background.
 | 
			
		||||
 */
 | 
			
		||||
bool nano::transport::inproc::channel::send_buffer (nano::shared_const_buffer const & buffer, nano::transport::traffic_type traffic_type, nano::transport::channel::callback_t callback)
 | 
			
		||||
bool nano::transport::inproc::channel::send_impl (nano::message const & message, nano::transport::traffic_type traffic_type, nano::transport::channel::callback_t callback)
 | 
			
		||||
{
 | 
			
		||||
	auto buffer = message.to_shared_const_buffer ();
 | 
			
		||||
 | 
			
		||||
	std::size_t offset{ 0 };
 | 
			
		||||
	auto const buffer_read_fn = [&offset, buffer_v = buffer.to_bytes ()] (std::shared_ptr<std::vector<uint8_t>> const & data_a, std::size_t size_a, std::function<void (boost::system::error_code const &, std::size_t)> callback_a) {
 | 
			
		||||
		debug_assert (buffer_v.size () >= (offset + size_a));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -40,7 +40,7 @@ namespace transport
 | 
			
		|||
			}
 | 
			
		||||
 | 
			
		||||
		protected:
 | 
			
		||||
			bool send_buffer (nano::shared_const_buffer const &, nano::transport::traffic_type, nano::transport::channel::callback_t) override;
 | 
			
		||||
			bool send_impl (nano::message const &, nano::transport::traffic_type, nano::transport::channel::callback_t) override;
 | 
			
		||||
 | 
			
		||||
		private:
 | 
			
		||||
			nano::node & destination;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -76,20 +76,27 @@ bool nano::transport::tcp_channel::max (nano::transport::traffic_type traffic_ty
 | 
			
		|||
	return queue.max (traffic_type);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool nano::transport::tcp_channel::send_buffer (nano::shared_const_buffer const & buffer, nano::transport::traffic_type type, nano::transport::channel::callback_t callback)
 | 
			
		||||
bool nano::transport::tcp_channel::send_impl (nano::message const & message, nano::transport::traffic_type type, nano::transport::channel::callback_t callback)
 | 
			
		||||
{
 | 
			
		||||
	auto buffer = message.to_shared_const_buffer ();
 | 
			
		||||
 | 
			
		||||
	nano::unique_lock<nano::mutex> lock{ mutex };
 | 
			
		||||
	if (!queue.full (type))
 | 
			
		||||
	{
 | 
			
		||||
		queue.push (type, { buffer, callback });
 | 
			
		||||
		lock.unlock ();
 | 
			
		||||
 | 
			
		||||
		node.stats.inc (nano::stat::type::tcp_channel, nano::stat::detail::queued, nano::stat::dir::out);
 | 
			
		||||
		node.stats.inc (nano::stat::type::tcp_channel_queued, to_stat_detail (type), nano::stat::dir::out);
 | 
			
		||||
		sending_task.notify ();
 | 
			
		||||
 | 
			
		||||
		sending_task.notify (); // Wake up the sending task
 | 
			
		||||
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		lock.unlock ();
 | 
			
		||||
 | 
			
		||||
		node.stats.inc (nano::stat::type::tcp_channel, nano::stat::detail::drop, nano::stat::dir::out);
 | 
			
		||||
		node.stats.inc (nano::stat::type::tcp_channel_drop, to_stat_detail (type), nano::stat::dir::out);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -66,7 +66,7 @@ public:
 | 
			
		|||
	std::string to_string () const override;
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
	bool send_buffer (nano::shared_const_buffer const &, nano::transport::traffic_type, nano::transport::channel::callback_t) override;
 | 
			
		||||
	bool send_impl (nano::message const &, nano::transport::traffic_type, nano::transport::channel::callback_t) override;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	void start ();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue