8#ifndef SEN_CORE_OBJ_OBJECT_PROVIDER_H
9#define SEN_CORE_OBJ_OBJECT_PROVIDER_H
56 std::function<std::shared_ptr<impl::ProxyObject>(impl::WorkQueue*,
const std::string&, ObjectOwnerId)>
proxyMaker;
63using ObjectAddition = std::variant<ObjectInstanceDiscovery, RemoteObjectDiscovery>;
82 return std::holds_alternative<ObjectInstanceDiscovery>(discovery) ? std::get<ObjectInstanceDiscovery>(discovery).id
83 : std::get<RemoteObjectDiscovery>(discovery).id;
88 return std::holds_alternative<ObjectInstanceDiscovery>(discovery)
89 ? std::get<ObjectInstanceDiscovery>(discovery).ownerId
90 : std::get<RemoteObjectDiscovery>(discovery).ownerId;
95 return std::holds_alternative<ObjectInstanceDiscovery>(discovery)
96 ? std::get<ObjectInstanceDiscovery>(discovery).interestId
97 : std::get<RemoteObjectDiscovery>(discovery).interestId;
102 return std::holds_alternative<ObjectInstanceDiscovery>(discovery)
103 ? std::get<ObjectInstanceDiscovery>(discovery).instance.get()
142 struct ConcurrentProviderList;
143 std::unique_ptr<ConcurrentProviderList> providers_;
172 virtual void addListener(ObjectProviderListener* listener,
bool notifyAboutExistingObjects);
181 virtual void removeListener(ObjectProviderListener* listener,
bool notifyAboutExistingObjects);
190 virtual void replaceListener(ObjectProviderListener* oldListener, ObjectProviderListener* newListener);
193 [[nodiscard]]
virtual bool hasListener(ObjectProviderListener* listener)
const noexcept;
208 virtual
void listenerAdded(ObjectProviderListener* listener,
bool notifyAboutExistingObjects);
211 virtual
void listenerRemoved(ObjectProviderListener* listener,
bool notifyAboutExistingObjects);
235 friend ObjectProviderListener;
236 void listenerDeleted(ObjectProviderListener* listener);
239 struct ConcurrentListenerList;
240 std::unique_ptr<ConcurrentListenerList> listeners_;
251 if (std::holds_alternative<ObjectInstanceDiscovery>(discovery))
253 const auto& instanceDiscovery = std::get<ObjectInstanceDiscovery>(discovery);
254 return {instanceDiscovery.interestId, instanceDiscovery.id, instanceDiscovery.ownerId};
257 const auto& remoteObjectDiscovery = std::get<RemoteObjectDiscovery>(discovery);
258 return {remoteObjectDiscovery.interestId, remoteObjectDiscovery.id, remoteObjectDiscovery.ownerId};
A sen object.
Definition object.h:76
Base class for an entity that is able to produce objects.
Definition object_provider.h:148
virtual void addListener(ObjectProviderListener *listener, bool notifyAboutExistingObjects)
Registers an event listener.
virtual void notifyObjectsAdded(const ObjectAdditionList &additions)
Calls onObjectAdded on all the registered listeners.
virtual void notifyAddedOnExistingObjects(ObjectProviderListener *listener)=0
Subclasses must call onObjectAdded on the listener for all the existing objects.
void notifyRemovedOnExistingObjectsForAllListeners()
Same as notifyRemovedOnExistingObjects but for all registered listeners.
virtual void replaceListener(ObjectProviderListener *oldListener, ObjectProviderListener *newListener)
Replaces an existing listener with a new one without triggering notifications. Keep in mind that the ...
void callOnObjectsAdded(ObjectProviderListener *listener, const ObjectAdditionList &additions) const
virtual ~ObjectProvider()
virtual void listenerRemoved(ObjectProviderListener *listener, bool notifyAboutExistingObjects)
Does nothing by default.
virtual bool hasListener(ObjectProviderListener *listener) const noexcept
Returns true if the listener has been added.
void callOnObjectsRemoved(ObjectProviderListener *listener, const ObjectRemovalList &removals) const
virtual void removeListener(ObjectProviderListener *listener, bool notifyAboutExistingObjects)
Un-registers an event listener.
virtual void listenerAdded(ObjectProviderListener *listener, bool notifyAboutExistingObjects)
Does nothing by default.
void forEachListener(const std::function< void(ObjectProviderListener *)> &callback) const
Calls callback once for each registered listener.
virtual void notifyRemovedOnExistingObjects(ObjectProviderListener *listener)=0
Subclasses must call onObjectRemoved on the listener for all the existing objects.
friend class ObjectFilter
Definition object_provider.h:199
virtual bool hasListeners() const noexcept
Returns true if there are registered listeners.
virtual void notifyObjectsRemoved(const ObjectRemovalList &removals)
Calls onObjectRemoved on all the registered listeners.
virtual void onObjectsAdded(const ObjectAdditionList &additions)=0
Called when objects are been added to a source.
ObjectProviderListener(const ObjectProviderListener &)=delete
ObjectProviderListener & operator=(const ObjectProviderListener &)=delete
virtual ~ObjectProviderListener()
virtual kernel::impl::RemoteParticipant * isRemoteParticipant() noexcept
ObjectProviderListener & operator=(ObjectProviderListener &&other) noexcept
friend class ObjectProvider
Definition object_provider.h:135
virtual void onObjectsRemoved(const ObjectRemovalList &removals)=0
Called when objects will be removed from a source.
virtual kernel::impl::LocalParticipant * isLocalParticipant() noexcept
ObjectProviderListener(ObjectProviderListener &&other) noexcept
std::shared_ptr< Object > instance
Definition object_provider.h:44
ObjectId objectid
Definition object_provider.h:69
ObjectOwnerId ownerId
Definition object_provider.h:70
ObjectId id
Definition object_provider.h:45
ObjectOwnerId ownerId
Definition object_provider.h:47
InterestId interestId
Definition object_provider.h:68
InterestId interestId
Definition object_provider.h:46
Object * getObjectInstance(const ObjectAddition &discovery)
Definition object_provider.h:100
std::variant< ObjectInstanceDiscovery, RemoteObjectDiscovery > ObjectAddition
Holds information about an object that is already present and we explicitly asked for.
Definition object_provider.h:63
ObjectId getObjectId(const ObjectAddition &discovery)
Definition object_provider.h:80
std::vector< ObjectAddition > ObjectAdditionList
Sequence of object additions.
Definition object_provider.h:74
InterestId getInterestId(const ObjectAddition &discovery)
Definition object_provider.h:93
ObjectOwnerId getObjectOwnerId(const ObjectAddition &discovery)
Definition object_provider.h:86
ObjectRemoval makeRemoval(const ObjectAddition &discovery)
Definition object_provider.h:249
std::vector< ObjectRemoval > ObjectRemovalList
Sequence of object removals.
Definition object_provider.h:77
Holds information about an object that has been discovered.
Definition object_provider.h:43
Holds information about an object that has been removed.
Definition object_provider.h:67
TypeHandle< const T > ConstTypeHandle
Definition type.h:319
Strong type for the unique identifier for a transport timer.
Definition native_object_impl.h:39
#define SEN_STRONG_TYPE_HASHABLE(name)
Makes your strong type std::hashable. NOLINTNEXTLINE.
Definition strong_type.h:188
#define SEN_STRONG_TYPE(name, native_type)
Helper macro to define strong types. NOLINTNEXTLINE.
Definition strong_type.h:179
Holds information about a remote object that has been discovered.
Definition object_provider.h:52
std::function< std::shared_ptr< impl::ProxyObject >(impl::WorkQueue *, const std::string &, ObjectOwnerId)> proxyMaker
Definition object_provider.h:56
ConstTypeHandle< ClassType > type
Definition object_provider.h:55
std::string name
Definition object_provider.h:54
ObjectOwnerId ownerId
Definition object_provider.h:58
ObjectId id
Definition object_provider.h:53
InterestId interestId
Definition object_provider.h:57
Utility to indicate that your class wants to be passed by value in some of the library calls.
Definition class_helpers.h:34