CARLA
 
载入中...
搜索中...
未找到
router.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
8// #include "carla/Logging.h" // 这行代码原本用于包含Carla日志记录功能的头文件,但已被注释掉,可能是为了避免重复包含或减少对特定日志依赖的考虑。
9
10#include "carla/streaming/detail/tcp/Message.h" // 包含Carla流处理框架中TCP消息定义的头文件,这些消息可能用于网络通信。
11
12#include "carla/ThreadPool.h" // 包含Carla线程池管理的头文件,线程池用于高效地管理和复用线程资源。
13
14#include "carla/multigpu/primary.h" // 包含Carla多GPU处理框架中主要组件和接口的定义,这些组件和接口可能用于管理GPU资源和任务分配。
15
16#include "carla/multigpu/primaryCommands.h" // 包含与Primary组件相关的命令定义的头文件,这些命令可能用于控制或查询Primary组件的状态。
17
18#include "carla/multigpu/commands.h" // 包含Carla多GPU处理框架中通用命令定义的头文件,这些命令可能用于多GPU之间的通信或任务同步。
19
20#include <boost/asio/io_context.hpp> // 包含Boost.Asio库中IO上下文定义的头文件,IO上下文是异步IO操作的核心组件。
21
22#include <boost/asio/ip/tcp.hpp> // 包含Boost.Asio库中TCP网络通信相关的定义和类,用于实现TCP客户端和服务器。
23
24#include <mutex> // 包含C++标准库中的互斥锁头文件,互斥锁用于保护共享资源免受并发访问的干扰。
25
26#include <vector> // 包含C++标准库中的动态数组(向量)头文件,向量是一种能够动态增长和缩小的数组类型。
27
28#include <sstream> // 包含C++标准库中的字符串流头文件,字符串流提供了一种将字符串作为流来处理的机制。
29
30#include <unordered_map> // 包含C++标准库中的无序映射(哈希表)头文件,无序映射是一种能够根据键快速查找值的容器。
31
32namespace carla {
33namespace multigpu {
34
35 // class Primary; // 这是一个被注释掉的前向声明,前向声明用于在正式定义类之前声明类的存在,但在此代码中并未使用。
36 class Listener; // 声明Listener类,Listener类可能用于监听多GPU处理框架中的事件或状态变化。
37
38 struct SessionInfo { // 定义一个结构体来保存会话信息。
39 std::shared_ptr<Primary> session; // 成员变量,指向Primary对象的智能指针,用于管理会话中的Primary对象。
40 carla::Buffer buffer; // 成员变量,用于存储数据的缓冲区,Buffer可能是Carla定义的一种数据结构。
41 };
42} // namespace multigpu
43} // namespace carla
44 struct SessionInfo { // 定义一个结构体来保存会话信息
45 std::shared_ptr<Primary> session; // 指向Primary对象的智能指针
46 carla::Buffer buffer; // 用于存储数据的缓冲区
47 };
48
49 class Router : public std::enable_shared_from_this<Router> { // 定义Router类,继承自std::enable_shared_from_this
50 public:
51
52 Router(void); // 构造函数
53 explicit Router(uint16_t port); // 带端口参数的构造函数
54 ~Router(); // 析构函数
55
56 void Write(MultiGPUCommand id, Buffer &&buffer); // 写入命令到下一个可用的GPU
57 std::future<SessionInfo> WriteToNext(MultiGPUCommand id, Buffer &&buffer); // 写入命令到下一个可用的GPU并返回一个future对象
58 std::future<SessionInfo> WriteToOne(std::weak_ptr<Primary> server, MultiGPUCommand id, Buffer &&buffer); // 写入命令到指定的GPU并返回一个future对象
59 void Stop(); // 停止Router
60
61 void SetCallbacks(); // 设置回调函数
62 void SetNewConnectionCallback(std::function<void(void)>); // 设置新连接的回调函数
63
64 void AsyncRun(size_t worker_threads); // 异步运行,指定工作线程的数量
65
66 boost::asio::ip::tcp::endpoint GetLocalEndpoint() const;
67
68 bool HasClientsConnected() { // 检查是否有客户端连接
69 return (!_sessions.empty()); // 如果会话列表不为空,则返回true
70 }
71
72 PrimaryCommands &GetCommander() { // 获取命令对象
73 return _commander;
74 }
75
76 std::weak_ptr<Primary> GetNextServer(); // 获取下一个服务器的弱引用
77
78 private:
79 void ConnectSession(std::shared_ptr<Primary> session); // 连接会话
80 void DisconnectSession(std::shared_ptr<Primary> session); // 断开会话
81 void ClearSessions(); // 清除会话
82
83 // 互斥锁和线程池必须放在开始位置,以确保最后被销毁
84 std::mutex _mutex; // 互斥锁
85 ThreadPool _pool; // 线程池
86 boost::asio::ip::tcp::endpoint _endpoint; // TCP端点
87 std::vector<std::shared_ptr<Primary>> _sessions; // 会话列表
88 std::shared_ptr<Listener> _listener; // 监听器
89 uint32_t _next; // 下一个会话的索引
90 std::unordered_map<Primary *, std::shared_ptr<std::promise<SessionInfo>>> _promises; // 用于异步操作的承诺映射
91 PrimaryCommands _commander; // 命令对象
92 std::function<void(void)> _callback; // 回调函数
93 };
94
95} // namespace multigpu
96} // namespace carla
包含 Carla 框架中与网络流相关的类和函数的声明。
std::unordered_map< Primary *, std::shared_ptr< std::promise< SessionInfo > > > _promises
Definition router.h:90
void Write(MultiGPUCommand id, Buffer &&buffer)
Definition router.cpp:161
void AsyncRun(size_t worker_threads)
Definition router.cpp:104
ThreadPool _pool
Definition router.h:85
~Router()
Definition router.cpp:20
void SetCallbacks()
Definition router.cpp:58
boost::asio::ip::tcp::endpoint _endpoint
Definition router.h:86
bool HasClientsConnected()
Definition router.h:68
boost::asio::ip::tcp::endpoint GetLocalEndpoint() const
Definition router.cpp:109
PrimaryCommands _commander
Definition router.h:91
std::function< void(void)> _callback
Definition router.h:92
void DisconnectSession(std::shared_ptr< Primary > session)
Definition router.cpp:133
std::future< SessionInfo > WriteToOne(std::weak_ptr< Primary > server, MultiGPUCommand id, Buffer &&buffer)
Definition router.cpp:235
Router(void)
Definition router.cpp:15
std::mutex _mutex
Definition router.h:84
void ClearSessions()
Definition router.cpp:145
void Stop()
Definition router.cpp:29
std::shared_ptr< Listener > _listener
Definition router.h:88
void ConnectSession(std::shared_ptr< Primary > session)
Definition router.cpp:118
std::vector< std::shared_ptr< Primary > > _sessions
Definition router.h:87
PrimaryCommands & GetCommander()
Definition router.h:72
uint32_t _next
Definition router.h:89
std::future< SessionInfo > WriteToNext(MultiGPUCommand id, Buffer &&buffer)
Definition router.cpp:193
void SetNewConnectionCallback(std::function< void(void)>)
Definition router.cpp:97
std::weak_ptr< Primary > GetNextServer()
Definition router.cpp:264
一块原始数据。 请注意,如果需要更多容量,则会分配一个新的内存块,并 删除旧的内存块。这意味着默认情况下,缓冲区只能增长。要释放内存,使用 clear 或 pop。
CARLA模拟器的主命名空间。
Definition Carla.cpp:139
std::shared_ptr< Primary > session
Definition router.h:45
carla::Buffer buffer
Definition router.h:46
std::shared_ptr< Primary > session
Definition router.h:39