TCP 服务器会话。会话打开时,它会从套接字读取流 ID 对象并将其自身传递给回调函子。 更多...
#include <primary.h>
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 () |
启动定时器以监控连接是否超时。 | |
![]() | |
LifetimeProfiled ()=default | |
![]() | |
NonCopyable ()=default | |
NonCopyable (const NonCopyable &)=delete | |
NonCopyable (NonCopyable &&)=delete | |
NonCopyable & | operator= (const NonCopyable &)=delete |
NonCopyable & | operator= (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 |
using carla::multigpu::Primary::socket_type = boost::asio::ip::tcp::socket |
|
explicit |
Primary类的构造函数。
io_context | 引用Boost.Asio的IO上下文,用于异步通信。 |
timeout | 会话的超时时间。 |
server | 对Listener对象的引用,用于处理传入的连接和消息。 |
构造函数初始化Primary类的成员变量,并设置性能分析器(如果使用了LIBCARLA_INITIALIZE_LIFETIME_PROFILER宏)。 它还会为当前会话分配一个唯一的会话ID,并创建一个新的套接字、截止时间和执行器绑定。
在文件 primary.cpp 第 51 行定义.
carla::multigpu::Primary::~Primary | ( | ) |
Primary类的析构函数实现。
如果套接字仍然打开,则先调用shutdown方法关闭套接字的读写操作,然后调用close方法关闭套接字。
在文件 primary.cpp 第 69 行定义.
引用了 _socket.
void carla::multigpu::Primary::Close | ( | ) |
发布工作以关闭会话。
异步读取套接字头部信息(即数据缓冲区的大小)。
此方法会启动一个异步读取操作,从TCP套接字中读取数据缓冲区的大小。 读取完成后,会调用handle_read_header
回调函数来处理读取结果。
关闭连接并释放资源。
此方法会启动一个异步任务,在该任务中尝试获取当前对象的强引用。 如果成功获取,则调用CloseNow
方法来关闭连接并释放资源。
在文件 primary.cpp 第 261 行定义.
引用了 _strand.
被这些函数引用 StartTimer().
|
private |
立即关闭连接并处理相关资源。
此方法用于在接收到关闭指令或错误时,立即取消任何挂起的操作,关闭套接字,
并通知相关的关闭事件处理函数。
ec | 错误代码,指示关闭操作是否由于错误而触发。 |
取消所有挂起的定时器操作。
如果没有错误代码(即正常关闭),则检查套接字是否仍然打开
如果套接字仍然打开,则先进行双向关闭操作,然后关闭套接字
通知关闭事件的处理函数,传递当前对象的共享指针。
记录调试信息,表明会话已关闭。
在文件 primary.cpp 第 299 行定义.
引用了 _deadline, _on_closed, _session_id, _socket , 以及 carla::log_debug().
|
inlinestatic |
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.cpp 第 78 行定义.
引用了 _on_closed, _on_response, _socket, DEBUG_ASSERT , 以及 ReadData().
void carla::multigpu::Primary::ReadData | ( | ) |
读取数据
异步地读取套接字数据。
此方法异步地从TCP套接字读取数据。它首先尝试获取当前对象的强引用, 如果成功,则分配一个缓冲区来接收数据,并注册一个回调函数来处理读取操作的结果。 如果读取成功,它将调用_on_response
回调函数,并递归地调用自己以继续读取数据。 如果读取失败,则记录错误日志并重新开始读取过程。
异步读取套接字头部信息(通常包含后续数据的大小)的回调函数。
此回调函数用于处理从TCP套接字异步读取的头部信息。如果成功读取且消息大小大于0, 则会分配相应大小的缓冲区,并启动异步读取数据的操作。如果读取失败或消息大小为0, 则会记录错误日志并关闭连接。
ec | 读取操作的结果代码。如果为0,表示读取成功;否则表示读取失败。 |
bytes | 读取的字节数(仅在调试模式下使用)。 |
在文件 primary.cpp 第 180 行定义.
引用了 _strand, DEBUG_ASSERT_EQ, DEBUG_ASSERT_NE, DEBUG_ONLY , 以及 carla::log_error().
被这些函数引用 Open().
|
private |
启动定时器以监控连接是否超时。
此方法会检查定时器是否已经过期。如果已过期,则记录调试信息并关闭连接。 如果未过期,则启动一个异步等待操作,等待定时器超时。超时后,会递归调用StartTimer
方法以继续监控,或者在遇到错误时记录错误日志。
在文件 primary.cpp 第 276 行定义.
引用了 _deadline, _session_id, Close(), carla::log_debug() , 以及 carla::log_error().
|
inline |
void carla::multigpu::Primary::Write | ( | std::shared_ptr< const carla::streaming::detail::tcp::Message > | message | ) |
将一些数据写入套接字。
在文件 primary.cpp 第 98 行定义.
引用了 _strand, DEBUG_ASSERT, DEBUG_ONLY , 以及 carla::log_error().
被这些函数引用 Write().
void carla::multigpu::Primary::Write | ( | std::string | text | ) |
写入字符串
异步地将文本数据写入套接字。
此方法将给定的文本数据异步写入TCP套接字。首先发送数据的大小(以字节为单位), 然后发送实际的文本数据。如果套接字未打开或对象已被销毁,则不执行任何操作。
text | 要写入套接字的文本数据。 |
在文件 primary.cpp 第 143 行定义.
引用了 _strand.
|
private |
|
private |
被这些函数引用 CloseNow() , 以及 StartTimer().
|
private |
被这些函数引用 CloseNow() , 以及 Open().
|
private |
|
private |
被这些函数引用 CloseNow() , 以及 StartTimer().
|
private |
被这些函数引用 CloseNow(), Open() , 以及 ~Primary().
|
private |
|
private |