Apache Celix
2.3.0
An implementation of the OSGi specification adapted to C and C++
|
Go to the documentation of this file.
26 #include "celix/Filter.h"
28 #include "celix/Properties.h"
57 explicit
UseServiceBuilder(std::shared_ptr<celix_bundle_context_t> _cCtx, std::string_view _name,
bool _useSingleService = true) :
58 cCtx{std::move(_cCtx)},
60 useSingleService{_useSingleService} {
63 UseServiceBuilder&
operator=(UseServiceBuilder&&) =
delete;
64 UseServiceBuilder(
const UseServiceBuilder&) =
delete;
65 UseServiceBuilder
operator=(
const UseServiceBuilder&) =
delete;
90 template <
typename Rep,
typename Period>
92 auto micro = std::chrono::duration_cast<std::chrono::microseconds>(duration).count();
93 timeoutInSeconds = micro / 1000000;
104 callbacks.emplace_back(std::move(cb));
117 callbacksWithProperties.emplace_back(std::move(cb));
131 callbacksWithOwner.emplace_back(std::move(cb));
149 opts.filter.serviceName = name.empty() ? nullptr : name.c_str();
150 opts.filter.ignoreServiceLanguage =
true;
151 opts.filter.filter = filter.empty() ? nullptr : filter.getFilterCString();
152 opts.filter.versionRange = versionRange.empty() ? nullptr : versionRange.c_str();
153 opts.waitTimeoutInSeconds = timeoutInSeconds;
154 opts.callbackHandle =
this;
155 opts.useWithOwner = [](
void* data,
void *voidSvc,
const celix_properties_t* cProps,
const celix_bundle_t* cBnd) {
157 auto* svc =
static_cast<I*
>(voidSvc);
158 const Bundle bnd{
const_cast<celix_bundle_t*
>(cBnd)};
159 auto props = celix::Properties::wrap(cProps);
160 for (
const auto& func : builder->callbacks) {
163 for (
const auto& func : builder->callbacksWithProperties) {
166 for (
const auto& func : builder->callbacksWithOwner) {
167 func(*svc, *props, bnd);
171 if (useSingleService) {
173 return called ? 1 : 0;
179 const std::shared_ptr<celix_bundle_context_t> cCtx;
180 const std::string name;
181 const bool useSingleService;
182 double timeoutInSeconds{0};
183 celix::Filter filter{};
184 std::string versionRange{};
185 std::vector<std::function<void(I&)>> callbacks{};
186 std::vector<std::function<void(I&,
const celix::Properties&)>> callbacksWithProperties{};
The bundle context is used to interact with the Celix framework.
Definition: BundleContext.h:52
Fluent builder API to use a service or services.
Definition: UseServiceBuilder.h:50
std::size_t build()
"Builds" the UseServiceBuild.
Definition: UseServiceBuilder.h:147
UseServiceBuilder & setTimeout(std::chrono::duration< Rep, Period > duration)
Sets a optional timeout.
Definition: UseServiceBuilder.h:91
bool celix_bundleContext_useServiceWithOptions(celix_bundle_context_t *ctx, const celix_service_use_options_t *opts)
Use the highest ranking service satisfying the provided service filter options using the provided cal...
Service Use Options used to fine tune which services to use and which callbacks to use.
Definition: celix_bundle_context.h:736
UseServiceBuilder & setFilter(std::string_view f)
Set filter to be used to select a service.
Definition: UseServiceBuilder.h:74
UseServiceBuilder & setFilter(celix::Filter f)
Set filter to be used to matching services.
Definition: UseServiceBuilder.h:79
An installed bundle in the Celix framework.
Definition: Bundle.h:47
UseServiceBuilder & addUseCallback(std::function< void(I &, const celix::Properties &, const celix::Bundle &)> cb)
Adds a use callback function which will be called when the UseServiceBuilder is "build".
Definition: UseServiceBuilder.h:130
UseServiceBuilder & addUseCallback(std::function< void(I &, const celix::Properties &)> cb)
Adds a use callback function which will be called when the UseServiceBuilder is "build".
Definition: UseServiceBuilder.h:116
size_t celix_bundleContext_useServicesWithOptions(celix_bundle_context_t *ctx, const celix_service_use_options_t *opts)
Use the services with the provided service filter options using the provided callback.
celix::Properties Properties
Definition: Properties.h:25
UseServiceBuilder & operator=(UseServiceBuilder &&)=delete
UseServiceBuilder & addUseCallback(std::function< void(I &)> cb)
Adds a use callback function which will be called when the UseServiceBuilder is "build".
Definition: UseServiceBuilder.h:103