18template <
typename EventVariant = DefaultEvents>
27 void* regPtr =
nullptr,
30 : _eventSink(sink), _registryPtr(regPtr), _getServiceFn(fn)
48 _registryPtr = registryPtr;
55 template <
typename ServiceType>
58 if (_registryPtr && _getServiceFn) {
59 return static_cast<ServiceType*
>(_getServiceFn(_registryPtr, internal::getTypeId<ServiceType>()));
67 template <
typename ServiceType>
70 auto* service = getService<ServiceType>();
72 if constexpr (
requires { service->sink(); }) {
73 return service->sink();
85 template <
typename TargetService,
typename EventType>
88 auto sinkHandle = getServiceSink<TargetService>();
90 sinkHandle.post(std::forward<EventType>(event), priority);
98 void* _registryPtr =
nullptr;
106template <
typename EventVariant = DefaultEvents>
Non-allocating type-erased fat pointer handle for lock-free event posting.
Compile-time type index resolution for std::variant alternative types.
Execution context provided to background services. Allows services to post events back to the main ev...
Definition ServiceContext.hpp:19
BasicServiceContext(EventSinkT< EventVariant > sink, void *regPtr=nullptr, GetServiceFn fn=nullptr) noexcept
Definition ServiceContext.hpp:25
void setRegistry(void *registryPtr, GetServiceFn fn) noexcept
Configure registry resolution bridge (internal framework usage).
Definition ServiceContext.hpp:46
EventSinkT< EventVariant > eventSink() const noexcept
Access main application EventSink handle.
Definition ServiceContext.hpp:40
bool sendToService(EventType &&event, EventPriority priority=EventPriority::Normal) const
Post an event directly to a target service.
Definition ServiceContext.hpp:86
EventSinkT< EventVariant > mainSink() const noexcept
Access main application EventSink handle.
Definition ServiceContext.hpp:34
void *(*)(void *registryPtr, internal::TypeIdPtr typeId) GetServiceFn
Definition ServiceContext.hpp:21
BasicServiceContext()=default
EventSinkT< EventVariant > getServiceSink() const noexcept
Retrieve event sink handle of a target registered service if available.
Definition ServiceContext.hpp:68
ServiceType * getService() const noexcept
Retrieve another registered service instance by type.
Definition ServiceContext.hpp:56
const void * TypeIdPtr
Definition VariantIndex.hpp:60
Definition Application.hpp:16
EventPriority
Event priority levels for multi-priority queue policies.
Definition QueuePolicies.hpp:32