TCP服务器会话类。 更多...
#include <ServerSession.h>
Public 类型 | |
using | callback_function_type = std::function<void(std::shared_ptr<ServerSession>)> |
回调函数类型别名。 | |
using | socket_type = boost::asio::ip::tcp::socket |
套接字类型别名。 | |
Public 成员函数 | |
void | Close () |
发布一个关闭会话的任务。 | |
stream_id_type | get_stream_id () const |
获取流ID。 | |
void | Open (callback_function_type on_opened, callback_function_type on_closed) |
启动会话。 | |
ServerSession (boost::asio::io_context &io_context, time_duration timeout, Server &server) | |
构造函数。 | |
template<typename... Buffers> | |
void | Write (Buffers... buffers) |
向套接字写入一些数据(模板函数)。 | |
void | Write (std::shared_ptr< const Message > message) |
向套接字写入一些数据。 | |
静态 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 属性 | |
boost::asio::deadline_timer | _deadline |
定时器,用于在会话超时后触发关闭操作。 | |
bool | _is_writing = false |
表示当前是否正在进行写入操作的标志。 | |
callback_function_type | _on_closed |
会话关闭时的回调函数。 | |
Server & | _server |
对 Server 对象的引用。 | |
const size_t | _session_id |
会话的唯一标识符。 | |
socket_type | _socket |
套接字类型,用于网络通信。 | |
boost::asio::io_context::strand | _strand |
用于保证异步操作顺序的 strand 对象。 | |
stream_id_type | _stream_id = 0u |
流标识符,用于标识会话中传输的数据流。 | |
time_duration | _timeout |
会话超时时长,表示会话在多长时间内无活动将被关闭。 | |
友元 | |
class | Server |
允许 Server 类访问私有成员。 | |
TCP服务器会话类。
当会话打开时,它会从套接字读取一个流ID对象,并将自身传递给回调函数。如果在指定的不活动超时后没有活动,会话将自行关闭。
该类继承自std::enable_shared_from_this<ServerSession>,以便能够安全地生成自身的shared_ptr。同时,它私有继承自 profiler::LifetimeProfiled用于性能分析,以及NonCopyable类以防止复制。
在文件 ServerSession.h 第 130 行定义.
using carla::streaming::detail::tcp::ServerSession::callback_function_type = std::function<void(std::shared_ptr<ServerSession>)> |
using carla::streaming::detail::tcp::ServerSession::socket_type = boost::asio::ip::tcp::socket |
套接字类型别名。
在文件 ServerSession.h 第 138 行定义.
|
explicit |
构造函数。
io_context | I/O上下文,用于异步操作。 |
timeout | 不活动超时时间。 |
server | 对Server对象的引用。 |
在文件 ServerSession.cpp 第 31 行定义.
void carla::streaming::detail::tcp::ServerSession::Close | ( | ) |
发布一个关闭会话的任务。
该函数安排一个任务来关闭当前会话,但不会立即关闭。
在文件 ServerSession.cpp 第 135 行定义.
引用了 _strand.
被这些函数引用 StartTimer().
|
private |
立即关闭会话。
该函数用于立即关闭会话,可选地接受一个错误代码参数来表示关闭的原因。
ec | 关闭会话时的错误代码,默认为无错误。 |
在文件 ServerSession.cpp 第 154 行定义.
引用了 _deadline, _on_closed, _session_id, _socket , 以及 carla::log_debug().
|
inline |
|
inlinestatic |
创建消息。
静态模板函数,接受一个或多个BufferView类型的参数,并创建一个Message对象的shared_ptr。
buffers | 一个或多个BufferView类型的参数。 |
在文件 ServerSession.h 第 190 行定义.
被这些函数引用 carla::streaming::detail::MultiStreamState::Write() , 以及 Write().
void carla::streaming::detail::tcp::ServerSession::Open | ( | callback_function_type | on_opened, |
callback_function_type | on_closed ) |
启动会话。
成功读取流ID后调用on_opened回调,会话关闭时调用on_closed回调。 @param on_opened 会话打开时的回调函数。
on_closed | 会话关闭时的回调函数。 |
在文件 ServerSession.cpp 第 46 行定义.
引用了 _deadline, _on_closed, _session_id, _socket, _strand, _stream_id, _timeout, CloseNow(), DEBUG_ASSERT, DEBUG_ASSERT_EQ, DEBUG_ONLY, carla::log_debug(), carla::log_error() , 以及 StartTimer().
|
private |
启动定时器。
该函数用于启动一个定时器,该定时器在会话空闲时间超过指定时长后触发关闭操作。
在文件 ServerSession.cpp 第 139 行定义.
引用了 _deadline, _session_id, Close(), carla::log_debug() , 以及 StartTimer().
被这些函数引用 Open() , 以及 StartTimer().
|
inline |
向套接字写入一些数据(模板函数)。
该模板函数接受任意数量的缓冲区参数,并将它们组合成一个消息对象,然后写入到套接字中。
buffers | 要写入的缓冲区,类型应为 BufferView 或其兼容类型。 |
内部调用 Write(std::shared_ptr<const Message> message) 函数,
通过 MakeMessage 函数将缓冲区参数转换为消息对象。
在文件 ServerSession.h 第 207 行定义.
引用了 MakeMessage() , 以及 Write().
void carla::streaming::detail::tcp::ServerSession::Write | ( | std::shared_ptr< const Message > | message | ) |
向套接字写入一些数据。
该函数将一个包含数据的消息对象写入到套接字中。
在文件 ServerSession.cpp 第 92 行定义.
引用了 _deadline, _is_writing, _server, _session_id, _socket, _strand, _timeout, CloseNow(), DEBUG_ASSERT, DEBUG_ASSERT_EQ, DEBUG_ONLY, carla::streaming::detail::tcp::Server::IsSynchronousMode(), carla::log_debug() , 以及 carla::log_info().
被这些函数引用 Write().
|
friend |
允许 Server 类访问私有成员。
在文件 ServerSession.h 第 229 行定义.
|
private |
定时器,用于在会话超时后触发关闭操作。
在文件 ServerSession.h 第 241 行定义.
被这些函数引用 CloseNow(), Open(), StartTimer() , 以及 Write().
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |