CARLA
 
载入中...
搜索中...
未找到
Public 类型 | Public 成员函数 | 静态 Public 成员函数 | Private 成员函数 | Private 属性 | 友元 | 所有成员列表
carla::multigpu::Primary类 参考

TCP 服务器会话。会话打开时,它会从套接字读取流 ID 对象并将其自身传递给回调函子。 更多...

#include <primary.h>

+ 类 carla::multigpu::Primary 继承关系图:
+ carla::multigpu::Primary 的协作图:

Public 类型

using socket_type = boost::asio::ip::tcp::socket
 

Public 成员函数

void Close ()
 发布工作以关闭会话。
 
void Open (Listener::callback_function_type on_opened, Listener::callback_function_type on_closed, Listener::callback_function_type_response on_response)
 启动会话并在成功读取流 id 后调用 on_opened,会话关闭后调用 on_closed。
 
 Primary (boost::asio::io_context &io_context, time_duration timeout, Listener &server)
 Primary类的构造函数。
 
void ReadData ()
 读取数据
 
template<typename... Buffers>
void Write (Buffers... buffers)
 将一些数据写入套接字。
 
void Write (std::shared_ptr< const carla::streaming::detail::tcp::Message > message)
 将一些数据写入套接字。
 
void Write (std::string text)
 写入字符串
 
 ~Primary ()
 Primary类的析构函数实现。
 

静态 Public 成员函数

template<typename... Buffers>
static auto MakeMessage (Buffers... buffers)
 

Private 成员函数

void CloseNow (boost::system::error_code ec=boost::system::error_code())
 立即关闭连接并处理相关资源。

 
void StartTimer ()
 启动定时器以监控连接是否超时。
 
- Private 成员函数 继承自 carla::profiler::LifetimeProfiled
 LifetimeProfiled ()=default
 
- Private 成员函数 继承自 carla::NonCopyable
 NonCopyable ()=default
 
 NonCopyable (const NonCopyable &)=delete
 
 NonCopyable (NonCopyable &&)=delete
 
NonCopyableoperator= (const NonCopyable &)=delete
 
NonCopyableoperator= (NonCopyable &&)=delete
 

Private 属性

std::shared_ptr< BufferPool_buffer_pool
 
boost::asio::deadline_timer _deadline
 
bool _is_writing = false
 
Listener::callback_function_type _on_closed
 
Listener::callback_function_type_response _on_response
 
Listener_server
 
const size_t _session_id
 
socket_type _socket
 
boost::asio::io_context::strand _strand
 
time_duration _timeout
 

友元

class Listener
 

详细描述

TCP 服务器会话。会话打开时,它会从套接字读取流 ID 对象并将其自身传递给回调函子。

管理TCP会话的类,用于CARLA的多GPU通信。

在文件 primary.h55 行定义.

成员类型定义说明

◆ socket_type

using carla::multigpu::Primary::socket_type = boost::asio::ip::tcp::socket

在文件 primary.h61 行定义.

构造及析构函数说明

◆ Primary()

carla::multigpu::Primary::Primary ( boost::asio::io_context & io_context,
time_duration timeout,
Listener & server )
explicit

Primary类的构造函数。

参数
io_context引用Boost.Asio的IO上下文,用于异步通信。
timeout会话的超时时间。
server对Listener对象的引用,用于处理传入的连接和消息。

构造函数初始化Primary类的成员变量,并设置性能分析器(如果使用了LIBCARLA_INITIALIZE_LIFETIME_PROFILER宏)。 它还会为当前会话分配一个唯一的会话ID,并创建一个新的套接字、截止时间和执行器绑定。

在文件 primary.cpp51 行定义.

◆ ~Primary()

carla::multigpu::Primary::~Primary ( )

Primary类的析构函数实现。

如果套接字仍然打开,则先调用shutdown方法关闭套接字的读写操作,然后调用close方法关闭套接字。

在文件 primary.cpp69 行定义.

引用了 _socket.

成员函数说明

◆ Close()

void carla::multigpu::Primary::Close ( )

发布工作以关闭会话。

异步读取套接字头部信息(即数据缓冲区的大小)。

此方法会启动一个异步读取操作,从TCP套接字中读取数据缓冲区的大小。 读取完成后,会调用handle_read_header回调函数来处理读取结果。

关闭连接并释放资源。

此方法会启动一个异步任务,在该任务中尝试获取当前对象的强引用。 如果成功获取,则调用CloseNow方法来关闭连接并释放资源。

在文件 primary.cpp261 行定义.

引用了 _strand.

被这些函数引用 StartTimer().

+ 这是这个函数的调用关系图:

◆ CloseNow()

void carla::multigpu::Primary::CloseNow ( boost::system::error_code ec = boost::system::error_code())
private

立即关闭连接并处理相关资源。

此方法用于在接收到关闭指令或错误时,立即取消任何挂起的操作,关闭套接字,
并通知相关的关闭事件处理函数。

参数
ec错误代码,指示关闭操作是否由于错误而触发。

取消所有挂起的定时器操作。

如果没有错误代码(即正常关闭),则检查套接字是否仍然打开

如果套接字仍然打开,则先进行双向关闭操作,然后关闭套接字

通知关闭事件的处理函数,传递当前对象的共享指针。

记录调试信息,表明会话已关闭。

在文件 primary.cpp299 行定义.

引用了 _deadline, _on_closed, _session_id, _socket , 以及 carla::log_debug().

+ 函数调用图:

◆ MakeMessage()

template<typename... Buffers>
static auto carla::multigpu::Primary::MakeMessage ( Buffers... buffers)
inlinestatic

在文件 primary.h79 行定义.

被这些函数引用 Write().

+ 这是这个函数的调用关系图:

◆ Open()

void carla::multigpu::Primary::Open ( Listener::callback_function_type on_opened,
Listener::callback_function_type on_closed,
Listener::callback_function_type_response on_response )

启动会话并在成功读取流 id 后调用 on_opened,会话关闭后调用 on_closed。

在文件 primary.cpp78 行定义.

引用了 _on_closed, _on_response, _socket, DEBUG_ASSERT , 以及 ReadData().

+ 函数调用图:

◆ ReadData()

void carla::multigpu::Primary::ReadData ( )

读取数据

异步地读取套接字数据。

此方法异步地从TCP套接字读取数据。它首先尝试获取当前对象的强引用, 如果成功,则分配一个缓冲区来接收数据,并注册一个回调函数来处理读取操作的结果。 如果读取成功,它将调用_on_response回调函数,并递归地调用自己以继续读取数据。 如果读取失败,则记录错误日志并重新开始读取过程。

异步读取套接字头部信息(通常包含后续数据的大小)的回调函数。

此回调函数用于处理从TCP套接字异步读取的头部信息。如果成功读取且消息大小大于0, 则会分配相应大小的缓冲区,并启动异步读取数据的操作。如果读取失败或消息大小为0, 则会记录错误日志并关闭连接。

参数
ec读取操作的结果代码。如果为0,表示读取成功;否则表示读取失败。
bytes读取的字节数(仅在调试模式下使用)。

在文件 primary.cpp180 行定义.

引用了 _strand, DEBUG_ASSERT_EQ, DEBUG_ASSERT_NE, DEBUG_ONLY , 以及 carla::log_error().

被这些函数引用 Open().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ StartTimer()

void carla::multigpu::Primary::StartTimer ( )
private

启动定时器以监控连接是否超时。

此方法会检查定时器是否已经过期。如果已过期,则记录调试信息并关闭连接。 如果未过期,则启动一个异步等待操作,等待定时器超时。超时后,会递归调用StartTimer 方法以继续监控,或者在遇到错误时记录错误日志。

在文件 primary.cpp276 行定义.

引用了 _deadline, _session_id, Close(), carla::log_debug() , 以及 carla::log_error().

+ 函数调用图:

◆ Write() [1/3]

template<typename... Buffers>
void carla::multigpu::Primary::Write ( Buffers... buffers)
inline

将一些数据写入套接字。

在文件 primary.h97 行定义.

引用了 MakeMessage() , 以及 Write().

+ 函数调用图:

◆ Write() [2/3]

void carla::multigpu::Primary::Write ( std::shared_ptr< const carla::streaming::detail::tcp::Message > message)

将一些数据写入套接字。

在文件 primary.cpp98 行定义.

引用了 _strand, DEBUG_ASSERT, DEBUG_ONLY , 以及 carla::log_error().

被这些函数引用 Write().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ Write() [3/3]

void carla::multigpu::Primary::Write ( std::string text)

写入字符串

异步地将文本数据写入套接字。

此方法将给定的文本数据异步写入TCP套接字。首先发送数据的大小(以字节为单位), 然后发送实际的文本数据。如果套接字未打开或对象已被销毁,则不执行任何操作。

参数
text要写入套接字的文本数据。

在文件 primary.cpp143 行定义.

引用了 _strand.

友元及相关函数文档

◆ Listener

friend class Listener
friend

在文件 primary.h112 行定义.

类成员变量说明

◆ _buffer_pool

std::shared_ptr<BufferPool> carla::multigpu::Primary::_buffer_pool
private

在文件 primary.h130 行定义.

◆ _deadline

boost::asio::deadline_timer carla::multigpu::Primary::_deadline
private

在文件 primary.h122 行定义.

被这些函数引用 CloseNow() , 以及 StartTimer().

◆ _is_writing

bool carla::multigpu::Primary::_is_writing = false
private

在文件 primary.h132 行定义.

◆ _on_closed

Listener::callback_function_type carla::multigpu::Primary::_on_closed
private

在文件 primary.h126 行定义.

被这些函数引用 CloseNow() , 以及 Open().

◆ _on_response

Listener::callback_function_type_response carla::multigpu::Primary::_on_response
private

在文件 primary.h128 行定义.

被这些函数引用 Open().

◆ _server

Listener& carla::multigpu::Primary::_server
private

在文件 primary.h114 行定义.

◆ _session_id

const size_t carla::multigpu::Primary::_session_id
private

在文件 primary.h116 行定义.

被这些函数引用 CloseNow() , 以及 StartTimer().

◆ _socket

socket_type carla::multigpu::Primary::_socket
private

在文件 primary.h118 行定义.

被这些函数引用 CloseNow(), Open() , 以及 ~Primary().

◆ _strand

boost::asio::io_context::strand carla::multigpu::Primary::_strand
private

在文件 primary.h124 行定义.

被这些函数引用 Close(), ReadData(), Write() , 以及 Write().

◆ _timeout

time_duration carla::multigpu::Primary::_timeout
private

在文件 primary.h120 行定义.


该类的文档由以下文件生成: