8#ifndef SEN_CORE_OBJ_OBJECT_PROVIDER_H
9#define SEN_CORE_OBJ_OBJECT_PROVIDER_H
53 std::function<std::shared_ptr<impl::ProxyObject>(impl::WorkQueue*,
const std::string&, ObjectOwnerId)>
proxyMaker;
60using ObjectAddition = std::variant<ObjectInstanceDiscovery, RemoteObjectDiscovery>;
79 return std::holds_alternative<ObjectInstanceDiscovery>(discovery) ? std::get<ObjectInstanceDiscovery>(discovery).id
80 : std::get<RemoteObjectDiscovery>(discovery).id;
85 return std::holds_alternative<ObjectInstanceDiscovery>(discovery)
86 ? std::get<ObjectInstanceDiscovery>(discovery).ownerId
87 : std::get<RemoteObjectDiscovery>(discovery).ownerId;
92 return std::holds_alternative<ObjectInstanceDiscovery>(discovery)
93 ? std::get<ObjectInstanceDiscovery>(discovery).interestId
94 : std::get<RemoteObjectDiscovery>(discovery).interestId;
99 return std::holds_alternative<ObjectInstanceDiscovery>(discovery)
100 ? std::get<ObjectInstanceDiscovery>(discovery).instance.get()
162 virtual void addListener(ObjectProviderListener* listener,
bool notifyAboutExistingObjects);
171 virtual void removeListener(ObjectProviderListener* listener,
bool notifyAboutExistingObjects);
174 [[nodiscard]]
virtual bool hasListener(ObjectProviderListener* listener)
const noexcept;
189 virtual
void listenerAdded(ObjectProviderListener* listener,
bool notifyAboutExistingObjects);
192 virtual
void listenerRemoved(ObjectProviderListener* listener,
bool notifyAboutExistingObjects);
207 [[nodiscard]] const
std::vector<ObjectProviderListener*>&
getListeners() const noexcept;
210 friend ObjectProviderListener;
211 void listenerDeleted(ObjectProviderListener* listener);
214 std::vector<ObjectProviderListener*> listeners_;
225 if (std::holds_alternative<ObjectInstanceDiscovery>(discovery))
227 const auto& instanceDiscovery = std::get<ObjectInstanceDiscovery>(discovery);
228 return {instanceDiscovery.interestId, instanceDiscovery.id, instanceDiscovery.ownerId};
231 const auto& remoteObjectDiscovery = std::get<RemoteObjectDiscovery>(discovery);
232 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:138
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.
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.
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:180
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.
const std::vector< ObjectProviderListener * > & getListeners() const noexcept
virtual void onObjectsAdded(const ObjectAdditionList &additions)=0
Called when objects are been added to a source.
ObjectProviderListener()=default
virtual ~ObjectProviderListener()
virtual kernel::impl::RemoteParticipant * isRemoteParticipant() noexcept
friend class ObjectProvider
Definition object_provider.h:128
virtual void onObjectsRemoved(const ObjectRemovalList &removals)=0
Called when objects will be removed from a source.
virtual kernel::impl::LocalParticipant * isLocalParticipant() noexcept
std::shared_ptr< Object > instance
Definition object_provider.h:41
ObjectId objectid
Definition object_provider.h:66
ObjectOwnerId ownerId
Definition object_provider.h:67
ObjectId id
Definition object_provider.h:42
ObjectOwnerId ownerId
Definition object_provider.h:44
InterestId interestId
Definition object_provider.h:65
InterestId interestId
Definition object_provider.h:43
Object * getObjectInstance(const ObjectAddition &discovery)
Definition object_provider.h:97
std::variant< ObjectInstanceDiscovery, RemoteObjectDiscovery > ObjectAddition
Holds information about an object that is already present and we explicitly asked for.
Definition object_provider.h:60
ObjectId getObjectId(const ObjectAddition &discovery)
Definition object_provider.h:77
std::vector< ObjectAddition > ObjectAdditionList
Sequence of object additions.
Definition object_provider.h:71
InterestId getInterestId(const ObjectAddition &discovery)
Definition object_provider.h:90
ObjectOwnerId getObjectOwnerId(const ObjectAddition &discovery)
Definition object_provider.h:83
ObjectRemoval makeRemoval(const ObjectAddition &discovery)
Definition object_provider.h:223
std::vector< ObjectRemoval > ObjectRemovalList
Sequence of object removals.
Definition object_provider.h:74
Holds information about an object that has been discovered.
Definition object_provider.h:40
Holds information about an object that has been removed.
Definition object_provider.h:64
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:49
std::function< std::shared_ptr< impl::ProxyObject >(impl::WorkQueue *, const std::string &, ObjectOwnerId)> proxyMaker
Definition object_provider.h:53
ConstTypeHandle< ClassType > type
Definition object_provider.h:52
std::string name
Definition object_provider.h:51
ObjectOwnerId ownerId
Definition object_provider.h:55
ObjectId id
Definition object_provider.h:50
InterestId interestId
Definition object_provider.h:54
Utility to indicate that your class wants to be passed by value in some of the library calls.
Definition class_helpers.h:34