CARLA
 
载入中...
搜索中...
未找到
primary.h
浏览该文件的文档.
1// Copyright (c) 2022 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 // 这是一个预处理指令,用于确保当前头文件在每个编译单元中只被包含(include)一次,防止重复包含导致的编译错误。
8
9// 引入Carla库中定义的不可复制类的头文件
10#include "carla/NonCopyable.h"
11// 这个类通常用于实现禁止对象被复制的功能,通过删除拷贝构造函数和赋值运算符来实现。
12
13// 引入Carla库中与时间相关的定义的头文件
14#include "carla/Time.h"
15// 这个头文件可能包含了时间类型、时间戳、时间间隔等与时间相关的定义和函数。
16
17// 引入Carla库中类型特征的定义的头文件
18#include "carla/TypeTraits.h"
19// 类型特征(Type Traits)是C++中用于查询类型属性的一组模板类和函数,这个头文件可能包含了这些模板类和函数的定义。
20
21// 引入Carla库中生命周期分析的定义的头文件
23// 这个头文件可能包含了用于分析对象生命周期的类、函数或宏定义,帮助开发者了解对象的创建和销毁情况。
24
25// 引入Carla流处理框架中流相关的类型定义的头文件
27// 这个头文件可能包含了流处理框架中使用的各种类型定义,如数据类型、错误码等。
28
29// 引入Carla流处理框架中TCP消息的定义的头文件
31// 这个头文件可能包含了TCP消息的结构定义、序列化/反序列化函数等。
32
33// 引入Carla多GPU处理框架中用于监听GPU事件和状态的Listener类的定义的头文件
35// 这个头文件包含了Listener类的定义,该类可能用于监听GPU的事件(如任务完成、错误等)和状态(如温度、利用率等)。
36
37// 引入Boost.Asio库中截止时间定时器的头文件
38#include <boost/asio/deadline_timer.hpp>
39// 截止时间定时器(deadline_timer)是Boost.Asio库中用于在指定时间点触发操作的类。
40
41// 引入Boost.Asio库中IO上下文的头文件
42#include <boost/asio/io_context.hpp>
43// IO上下文(io_context)是Boost.Asio库中的核心组件之一,它管理异步操作的执行和调度。
44#include <boost/asio/ip/tcp.hpp> // 引入 Boost.Asio 的 TCP IP 协议
45#include <boost/asio/strand.hpp> // 引入 Boost.Asio 的 Strand 用于同步
46
47#include <functional> // 引入函数对象的定义
48#include <memory> // 引入智能指针的定义
49
50namespace carla {
51namespace multigpu {
52
53 /// TCP 服务器会话。会话打开时,它会从套接字读取流 ID 对象并将其自身传递给回调函子。
54 // 会话在达到不活动超时 @a timeout 后自行关闭。
55 class Primary
56 : public std::enable_shared_from_this<Primary>, // 允许生成指向自身的共享指针
57 private profiler::LifetimeProfiled, // 进行生命周期分析
58 private NonCopyable { // 禁止拷贝构造和赋值操作
59 public:
60
61 using socket_type = boost::asio::ip::tcp::socket; // 定义 socket 类型
62
63 // 构造函数,接受 IO 上下文、超时时间和监听器引用
64 explicit Primary(
65 boost::asio::io_context &io_context, // IO 上下文引用
66 time_duration timeout, // 超时时间
67 Listener &server); // 监听器引用
68
69 ~Primary(); // 析构函数
70
71 /// 启动会话并在成功读取流 id 后调用 @a on_opened,会话关闭后调用 @a on_closed。
72 void Open(
73 Listener::callback_function_type on_opened, // 会话打开后的回调
74 Listener::callback_function_type on_closed, // 会话关闭后的回调
75 Listener::callback_function_type_response on_response); // 响应回调
76
77 // 创建消息的静态模板函数
78 template <typename... Buffers>
79 static auto MakeMessage(Buffers... buffers) {
80 static_assert(
81 are_same<SharedBufferView, Buffers...>::value, // 确保参数类型正确
82 "This function only accepts arguments of type BufferView."); // 错误信息
83 return std::make_shared<const carla::streaming::detail::tcp::Message>(buffers...); // 返回共享消息指针
84 }
85
86 /// 将一些数据写入套接字。
87 void Write(std::shared_ptr<const carla::streaming::detail::tcp::Message> message); // 写入消息
88
89 /// 写入字符串
90 void Write(std::string text); // 写入字符串
91
92 /// 读取数据
93 void ReadData(); // 读取数据
94
95 /// 将一些数据写入套接字。
96 template <typename... Buffers>
97 void Write(Buffers... buffers) {
98 Write(MakeMessage(buffers...)); // 使用 MakeMessage 创建并写入消息
99 }
100
101 /// 发布工作以关闭会话。
102 void Close(); // 关闭会话
103
104 private:
105
106 // 开启计时器
107 void StartTimer(); // 启动定时器
108
109 // 立即关闭
110 void CloseNow(boost::system::error_code ec = boost::system::error_code()); // 立即关闭会话
111
112 friend class Listener; // 允许 Listener 访问私有成员
113
114 Listener &_server; // 监听器引用
115
116 const size_t _session_id; // 会话 ID
117
118 socket_type _socket; // 套接字
119
120 time_duration _timeout; // 超时时间
121
122 boost::asio::deadline_timer _deadline; // 截止时间定时器
123
124 boost::asio::io_context::strand _strand; // 用于同步的 Strand
125
126 Listener::callback_function_type _on_closed; // 会话关闭时的回调
127
129
130 std::shared_ptr<BufferPool> _buffer_pool; // 缓冲池的共享指针
131
132 bool _is_writing = false; // 写入状态标志
133 };
134
135} // namespace multigpu
136} // namespace carla
包含 Carla 框架中与网络流相关的类和函数的声明。
包含与Carla流处理相关的底层细节的头文件。
这个类用于禁止拷贝和移动构造函数及赋值操作
警告:在它的io_context停止之前,这个服务器不能被销毁。
Definition listener.cpp:20
std::function< void(std::shared_ptr< Primary >)> callback_function_type
Definition listener.h:32
std::function< void(std::shared_ptr< Primary >, carla::Buffer)> callback_function_type_response
Definition listener.h:33
TCP 服务器会话。会话打开时,它会从套接字读取流 ID 对象并将其自身传递给回调函子。
Definition primary.h:58
const size_t _session_id
Definition primary.h:116
void StartTimer()
启动定时器以监控连接是否超时。
Definition primary.cpp:276
boost::asio::deadline_timer _deadline
Definition primary.h:122
time_duration _timeout
Definition primary.h:120
void Write(Buffers... buffers)
将一些数据写入套接字。
Definition primary.h:97
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。
Definition primary.cpp:78
~Primary()
Primary类的析构函数实现。
Definition primary.cpp:69
std::shared_ptr< BufferPool > _buffer_pool
Definition primary.h:130
Listener::callback_function_type _on_closed
Definition primary.h:126
Primary(boost::asio::io_context &io_context, time_duration timeout, Listener &server)
Primary类的构造函数。
Definition primary.cpp:51
boost::asio::io_context::strand _strand
Definition primary.h:124
static auto MakeMessage(Buffers... buffers)
Definition primary.h:79
boost::asio::ip::tcp::socket socket_type
Definition primary.h:61
Listener::callback_function_type_response _on_response
Definition primary.h:128
void Write(std::shared_ptr< const carla::streaming::detail::tcp::Message > message)
将一些数据写入套接字。
Definition primary.cpp:98
void CloseNow(boost::system::error_code ec=boost::system::error_code())
立即关闭连接并处理相关资源。
Definition primary.cpp:299
void Close()
发布工作以关闭会话。
Definition primary.cpp:261
void ReadData()
读取数据
Definition primary.cpp:180
Positive time duration up to milliseconds resolution.
Definition Time.h:19
CARLA模拟器的主命名空间。
Definition Carla.cpp:139
std::shared_ptr< BufferView > SharedBufferView
Definition BufferView.h:163