CARLA
 
载入中...
搜索中...
未找到
Dispatcher.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// 包含必要的头文件
14
15#include <memory>
16#include <mutex>
17#include <unordered_map>
18// carla 命名空间
19namespace carla {
20// streaming 子命名空间
21namespace streaming {
22// detail 子命名空间
23namespace detail {
24// 前向声明 MultiStreamState 类
25 class MultiStreamState;
26// 定义 StreamMap 为 std::unordered_map,键为 stream_id_type,值为指向 MultiStreamState 的共享指针
27 using StreamMap = std::unordered_map<stream_id_type, std::shared_ptr<MultiStreamState>>;
28
29 /// Keeps the mapping between streams and sessions.
30 class Dispatcher {
31 public:
32// 构造函数,接受一个 EndPoint 类型的参数并初始化成员变量
33 template <typename Protocol, typename EndPointType>
35 : _cached_token(0u, ep) {}
36 // 析构函数
38// 创建一个新的流
40// 关闭指定 ID 的流
42// 注册一个会话
43 bool RegisterSession(std::shared_ptr<Session> session);
44// 注销一个会话
45 void DeregisterSession(std::shared_ptr<Session> session);
46// 获取指定传感器 ID 的令牌
48// 启用针对 ROS 的功能,通过传感器 ID 找到对应的流并调用其 EnableForROS 方法
49 void EnableForROS(stream_id_type sensor_id) {
50 auto search = _stream_map.find(sensor_id);
51 if (search != _stream_map.end()) {
52 search->second->EnableForROS();
53 }
54 }
55// 禁用针对 ROS 的功能,通过传感器 ID 找到对应的流并调用其 DisableForROS 方法
56 void DisableForROS(stream_id_type sensor_id) {
57 auto search = _stream_map.find(sensor_id);
58 if (search != _stream_map.end()) {
59 search->second->DisableForROS();
60 }
61 }
62// 检查指定传感器 ID 的流是否针对 ROS 启用,通过传感器 ID 找到对应的流并调用其 IsEnabledForROS 方法
64 auto search = _stream_map.find(sensor_id);
65 if (search != _stream_map.end()) {
66 return search->second->IsEnabledForROS();
67 }
68 return false;
69 }
70
71 private:
72
73 // We use a mutex here, but we assume that sessions and streams won't be
74 // created too often.
75 std::mutex _mutex;
76// 缓存的令牌
78// 存储流 ID 和对应的 MultiStreamState 共享指针的哈希表
80 };
81
82} // namespace detail
83} // namespace streaming
84} // namespace carla
Keeps the mapping between streams and sessions.
Definition Dispatcher.h:30
void DeregisterSession(std::shared_ptr< Session > session)
Dispatcher(const EndPoint< Protocol, EndPointType > &ep)
Definition Dispatcher.h:34
carla::streaming::Stream MakeStream()
bool RegisterSession(std::shared_ptr< Session > session)
void DisableForROS(stream_id_type sensor_id)
Definition Dispatcher.h:56
bool IsEnabledForROS(stream_id_type sensor_id)
Definition Dispatcher.h:63
void CloseStream(carla::streaming::detail::stream_id_type id)
void EnableForROS(stream_id_type sensor_id)
Definition Dispatcher.h:49
token_type GetToken(stream_id_type sensor_id)
静态断言,用于确保token_data结构体的大小与Token::data的大小相同。
包含CARLA流处理相关头文件和Boost.Asio网络库头文件。 包含CARLA的调试功能相关定义。 包含CARLA流处理的端点(EndPoint)类定义。 包含CARLA流处理的令牌(Token)类...
std::unordered_map< stream_id_type, std::shared_ptr< MultiStreamState > > StreamMap
Definition Dispatcher.h:27
uint32_t stream_id_type
流ID的类型定义。
Definition Types.h:33
CARLA模拟器的主命名空间。
Definition Carla.cpp:139