25#ifndef LIBCARLA_NO_EXCEPTIONS
28 auto stream_state = pair.second;
29 stream_state->ClearSessions();
30#ifndef LIBCARLA_NO_EXCEPTIONS
31 }
catch (
const std::exception &e) {
33 log_error(
"failed to clear sessions:", e.what());
43 std::lock_guard<std::mutex> lock(
_mutex);
46 std::shared_ptr<MultiStreamState> ptr;
73 std::lock_guard<std::mutex> lock(
_mutex);
75 log_debug(
"Calling CloseStream for ",
id);
81 auto stream_state = search->second;
85 log_debug(
"Disconnecting all sessions (stream ",
id,
")");
87 stream_state->ClearSessions();
99 std::lock_guard<std::mutex> lock(
_mutex);
101 auto search =
_stream_map.find(session->get_stream_id());
105 auto stream_state = search->second;
109 log_debug(
"Connecting session (stream ", session->get_stream_id(),
")");
111 stream_state->ConnectSession(std::move(session));
118 log_error(
"Invalid session: no stream available with id", session->get_stream_id());
129 std::lock_guard<std::mutex> lock(
_mutex);
131 log_debug(
"Calling DeregisterSession for ", session->get_stream_id());
133 auto search =
_stream_map.find(session->get_stream_id());
135 auto stream_state = search->second;
138 log_debug(
"Disconnecting session (stream ", session->get_stream_id(),
")");
140 stream_state->DisconnectSession(session);
151 std::lock_guard<std::mutex> lock(
_mutex);
153 log_debug(
"Searching sensor id: ", sensor_id);
158 log_debug(
"Found sensor id: ", sensor_id);
159 auto stream_state = search->second;
161 stream_state->ForceActive();
163 log_debug(
"Getting token from stream ", sensor_id,
" on port ", stream_state->token().get_port());
165 return stream_state->token();
169 log_debug(
"Not Found sensor id, creating sensor stream: ", sensor_id);
174 auto ptr = std::make_shared<MultiStreamState>(temp_token);
178 if (!result.second) {
180 log_debug(
"Failed to create multistream for stream ", sensor_id,
" on port ", temp_token.
get_port());
183 log_debug(
"Created token from stream ", sensor_id,
" on port ", temp_token.
get_port());
#define DEBUG_ASSERT(predicate)
void DeregisterSession(std::shared_ptr< Session > session)
carla::streaming::Stream MakeStream()
bool RegisterSession(std::shared_ptr< Session > session)
void CloseStream(carla::streaming::detail::stream_id_type id)
token_type GetToken(stream_id_type sensor_id)
静态断言,用于确保token_data结构体的大小与Token::data的大小相同。
const auto & get_stream_id() const
获取流ID的引用。
auto get_port() const
获取端口号。
token_data _token
存储令牌数据的成员变量。
void set_stream_id(stream_id_type id)
设置流ID。
uint32_t stream_id_type
流ID的类型定义。
detail::Stream< detail::MultiStreamState > Stream
A stream represents an unidirectional channel for sending data from server to client.
void throw_exception(const std::exception &e)
static void log_error(Args &&... args)
static void log_debug(Args &&... args)
stream_id_type stream_id
流ID,用于唯一标识一个流。