CARLA
 
载入中...
搜索中...
未找到
streaming/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
9#include "carla/Logging.h"// 包含 carla 库中的日志相关的头文件。
10#include "carla/ThreadPool.h"// 包含 carla 库中的线程池相关的头文件。
11#include "carla/streaming/Token.h"// 包含 carla 库中流处理相关的令牌(Token)头文件。
12
13#include "carla/streaming/detail/tcp/Client.h"// 包含 carla 库中流处理细节中 TCP 客户端相关的头文件。
14#include "carla/streaming/low_level/Client.h"// 包含 carla 库中流处理低层级客户端相关的头文件。
15
16#include <boost/asio/io_context.hpp>// 包含 Boost.Asio 库中的输入输出上下文(io_context)头文件。
17
18namespace carla {
19namespace streaming {
20
21using stream_token = detail::token_type;// 定义别名 stream_token 为 detail 命名空间中的 token_type。
22
23// 注释:一个能够订阅多个流的客户端。
24class Client {// 定义一个名为 Client 的类。
25using underlying_client = low_level::Client<detail::tcp::Client>;// 定义一个类型别名 underlying_client,表示低层级客户端,该客户端使用 detail::tcp::Client 作为模板参数。
26
27public:
28
29 Client() = default;// 默认构造函数,不进行任何特殊操作。
30
31 explicit Client(const std::string &fallback_address)
32 : _client(fallback_address) {}
33 // 带有一个字符串参数的构造函数,初始化内部的 _client 对象,传入的参数为备用地址(fallback_address)。
34
36 _service.Stop();
37 }
38 // 析构函数,停止内部的线程池服务 _service。
39
40 // 警告:不能对同一个流(即使是多流(MultiStream))订阅两次。
41 template <typename Functor>
42 void Subscribe(const Token &token, Functor &&callback) {
43 _client.Subscribe(_service.io_context(), token, std::forward<Functor>(callback));
44 }
45 // 模板函数,用于订阅一个令牌(Token)对应的流,并传入一个回调函数(Functor),内部调用底层客户端的订阅方法,并传入线程池的输入输出上下文(io_context)、令牌和回调函数。
46
47 void UnSubscribe(const Token &token) {
48 _client.UnSubscribe(token);
49 }
50 // 函数,用于取消订阅一个令牌(Token)对应的流,内部调用底层客户端的取消订阅方法。
51
52 void Run() {
53 _service.Run();
54 }
55 // 函数,启动线程池服务,以同步方式运行。
56
57 void AsyncRun(size_t worker_threads) {
58 _service.AsyncRun(worker_threads);
59 }
60 // 函数,启动线程池服务,以异步方式运行,并指定工作线程数量。
61
62private:
63
64 // 注释:这两个参数的顺序非常重要。
65
66 ThreadPool _service;// 定义一个线程池对象 _service。
67
68 underlying_client _client; // 定义一个底层客户端对象 _client。
69
70};
71
72} // namespace streaming
73} // namespace carla
基于Boost.Asio的上下文
Definition ThreadPool.h:24
void AsyncRun(size_t worker_threads)
Definition ThreadPool.h:62
auto & io_context()
Definition ThreadPool.h:35
void AsyncRun(size_t worker_threads)
void Subscribe(const Token &token, Functor &&callback)
void UnSubscribe(const Token &token)
Client(const std::string &fallback_address)
underlying_client _client
静态断言,用于确保token_data结构体的大小与Token::data的大小相同。
void Subscribe(boost::asio::io_context &io_context, token_type token, Functor &&callback)
CARLA模拟器的主命名空间。
Definition Carla.cpp:139
本文件包含了网络通信相关类所需的头文件。