CARLA
 
载入中...
搜索中...
未找到
streaming/detail/tcp/Client.h
浏览该文件的文档.
1// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma
2// de Barcelona (UAB).
3//
4// This work is licensed under the terms of the MIT license.
5// For a copy, see <https://opensource.org/licenses/MIT>.
6
7#pragma once
8/// \file
9/// \brief 本文件包含了网络通信相关类所需的头文件。
10#include "carla/Buffer.h"/// \include 包含用于网络通信的缓冲区类定义。
11#include "carla/NonCopyable.h"/// \include 包含禁止对象复制和赋值的基类定义。
12#include "carla/profiler/LifetimeProfiled.h"/// \include 包含用于性能分析的生命周期跟踪类定义。
13#include "carla/streaming/detail/Token.h"/// \include 包含流处理中的令牌类定义。
14#include "carla/streaming/detail/Types.h"/// \include 包含流处理中使用的类型别名和常量定义。
15
16#include <boost/asio/deadline_timer.hpp>/// \include 包含Boost.Asio的定时器类定义,用于处理超时事件。
17#include <boost/asio/io_context.hpp>/// \include 包含Boost.Asio的I/O上下文类定义,是异步操作的核心。
18#include <boost/asio/ip/tcp.hpp> /// \include 包含Boost.Asio的TCP协议支持,用于网络通信。
19#include <boost/asio/strand.hpp> /// \include 包含Boost.Asio的线程安全操作类定义,用于在多个线程间同步异步操作。
20
21#include <atomic>/// \include 包含C++标准库中的原子操作支持,用于实现线程安全的计数器等。
22#include <functional>/// \include 包含C++标准库中的函数对象支持,用于定义回调和可调用对象。
23#include <memory>/// \include 包含C++标准库中的智能指针支持,用于管理动态分配的内存。
24
25namespace carla {
26 /// 缓冲区池类,用于管理缓冲区的分配和释放。
27 class BufferPool;
28
29namespace streaming {
30namespace detail {
31namespace tcp {
32
33 /// @class Client
34 /// @brief 连接单个流的客户端。
35 ///
36 /// @warning 在释放共享指针之前,应该先停止这个客户端,否则它将不会被销毁。
37 class Client
38 : public std::enable_shared_from_this<Client>,// 使Client类支持通过shared_from_this()获取自身的shared_ptr
39 private profiler::LifetimeProfiled,// 继承自LifetimeProfiled类,用于生命周期性能分析(私有继承表示不在外部接口中暴露该基类)
40 private NonCopyable {// 继承自NonCopyable类,表示该类不可复制(私有继承表示不在外部接口中暴露该基类)
41 public:
42 /// @typedef endpoint
43 /// @brief TCP端点类型,用于表示TCP连接的一端。
44 using endpoint = boost::asio::ip::tcp::endpoint;
45 /// @typedef protocol_type
46 /// @brief 协议类型,表示TCP协议。
47 using protocol_type = endpoint::protocol_type;
48 /// @typedef callback_function_type
49 /// @brief 回调函数类型,接收一个Buffer作为参数。
50 using callback_function_type = std::function<void (Buffer)>;
51 /// @brief 构造函数。
52 ///
53 /// @param io_context 引用boost::asio的I/O上下文对象,用于异步操作。
54 /// @param token 流的令牌,包含流的唯一标识等信息。
55 /// @param callback 回调函数,当接收到数据时调用。
56 Client(
57 boost::asio::io_context &io_context,
58 const token_type &token,
59 callback_function_type callback);
60 /// @brief 析构函数。
62 /// @brief 连接到指定的流。
63 void Connect();
64 /// @brief 获取流的ID。
65 ///
66 /// @return 流的ID。
68 return _token.get_stream_id();
69 }
70 /// @brief 停止客户端。
71 void Stop();
72
73 private:
74 /// @brief 重新连接流。
75///
76/// 此方法尝试重新建立与流的连接。
77 void Reconnect();
78 /// @brief 从流中读取数据。
79///
80/// 此方法从已连接的流中读取数据,并处理这些数据。
81 void ReadData();
82 /// @brief 存储流的唯一标识令牌。
83///
84/// 这是一个常量,用于在客户端的整个生命周期内唯一标识流。
86 /// @brief 回调函数类型,用于处理读取的数据。
87///
88/// 当从流中读取到数据时,将调用此回调函数,并将读取到的数据作为参数传递给它。
90 /// @brief TCP套接字,用于与流建立连接。
91///
92/// 这是一个Boost.Asio的TCP套接字对象,用于与远程服务器进行通信。
93 boost::asio::ip::tcp::socket _socket;
94 /// @brief 序列化对套接字的访问。
95///
96/// 这是一个Boost.Asio的io_context strand对象,用于确保对套接字的访问是线程安全的。
97 boost::asio::io_context::strand _strand;
98 /// @brief 连接超时定时器。
99///
100/// 这是一个Boost.Asio的deadline_timer对象,用于在连接尝试超过指定时间后触发超时事件。
101 boost::asio::deadline_timer _connection_timer;
102 /// @brief 指向缓冲区池的共享指针。
103///
104/// 这是一个指向BufferPool对象的共享指针,用于管理内存缓冲区。
105 std::shared_ptr<BufferPool> _buffer_pool;
106 /// @brief 表示客户端是否已完成工作的原子布尔值。
107///
108/// 这是一个原子布尔值,用于在线程之间安全地表示客户端是否已完成其工作。初始值为false,表示客户端仍在运行。
109 std::atomic_bool _done{false};
110 };
111
112} // namespace tcp
113} // namespace detail
114} // namespace streaming
115} // namespace carla
包含与Carla流处理相关的底层细节的头文件。
一块原始数据。 请注意,如果需要更多容量,则会分配一个新的内存块,并 删除旧的内存块。这意味着默认情况下,缓冲区只能增长。要释放内存,使用 clear 或 pop。
这个类用于禁止拷贝和移动构造函数及赋值操作
std::function< void(Buffer)> callback_function_type
回调函数类型,接收一个Buffer作为参数。
boost::asio::io_context::strand _strand
序列化对套接字的访问。
boost::asio::ip::tcp::endpoint endpoint
TCP端点类型,用于表示TCP连接的一端。
callback_function_type _callback
回调函数类型,用于处理读取的数据。
boost::asio::deadline_timer _connection_timer
连接超时定时器。
std::shared_ptr< BufferPool > _buffer_pool
指向缓冲区池的共享指针。
Client(boost::asio::io_context &io_context, const token_type &token, callback_function_type callback)
构造函数。
std::atomic_bool _done
表示客户端是否已完成工作的原子布尔值。
stream_id_type GetStreamId() const
获取流的ID。
boost::asio::ip::tcp::socket _socket
TCP套接字,用于与流建立连接。
endpoint::protocol_type protocol_type
协议类型,表示TCP协议。
const token_type _token
存储流的唯一标识令牌。
静态断言,用于确保token_data结构体的大小与Token::data的大小相同。
const auto & get_stream_id() const
获取流ID的引用。
包含CARLA流处理相关头文件和Boost.Asio网络库头文件。 包含CARLA的调试功能相关定义。 包含CARLA流处理的端点(EndPoint)类定义。 包含CARLA流处理的令牌(Token)类...
uint32_t stream_id_type
流ID的类型定义。
Definition Types.h:33
CARLA模拟器的主命名空间。
Definition Carla.cpp:139