161 {
162 if (IsInit()) {
163 return true;
164 }
165 proto::RoleAttributes role;
166 role.set_node_name(node_name_);
167 role.set_channel_name(response_channel_);
169 role.set_channel_id(channel_id);
170 role.mutable_qos_profile()->CopyFrom(
172 auto transport = transport::Transport::Instance();
173 response_transmitter_ =
175 if (response_transmitter_ == nullptr) {
176 AERROR <<
" Create response pub failed.";
177 return false;
178 }
179
180 request_callback_ =
181 std::bind(&Service<Request, Response>::HandleRequest, this,
182 std::placeholders::_1, std::placeholders::_2);
183
184 role.set_channel_name(request_channel_);
186 role.set_channel_id(channel_id);
187 request_receiver_ = transport->CreateReceiver<Request>(
188 role,
189 [=](const std::shared_ptr<Request>& request,
190 const transport::MessageInfo& message_info,
191 const proto::RoleAttributes& reader_attr) {
192 (void)reader_attr;
193 auto task = [this, request, message_info]() {
194 this->HandleRequest(request, message_info);
195 };
196 Enqueue(std::move(task));
197 },
199 inited_ = true;
200 thread_ = std::thread(&Service<Request, Response>::Process, this);
201 if (request_receiver_ == nullptr) {
202 AERROR <<
" Create request sub failed." << request_channel_;
203 response_transmitter_.reset();
204 return false;
205 }
206 return true;
207}
static uint64_t RegisterChannel(const std::string &channel)
static const QosProfile QOS_PROFILE_SERVICES_DEFAULT