ObjectLifecycleController
open class ObjectLifecycleController : Controller
Keeps track of agents or specific Coaty objects in a Coaty network by monitoring agent identities or custom object types.
This controller observes advertisements and deadvertisements of such objects and discovers them. Changes are emitted on corresponding observables that applications can subscribe to.
You can use this controller either standalone by adding it to the container components or extend your custom controller class from this controller class.
If you want to keep track of custom object types (not agent identities), you
have to implement the remote side of the distributed object lifecycle
management explicitely, i.e. advertise/readvertise/deadvertise your custom
objects and observe/resolve corresponding Discover events. To facilitate
this, this controller provides convenience methods:
advertiseDiscoverableObject, readvertiseDiscoverableObject, and
deadvertiseDiscoverableObject.
Usually, a custom object should have the object ID of its agent identity,
i.e. Container.identity, set as its parentObjectId in order to be
automatically deadvertised when the agent terminates abnormally. You can
automate this by passing true to the optional parameter
shouldSetParentObjectId of method advertiseDiscoverableObject (true is
also the default parameter value).
-
Observes advertisements, deadvertisments and initial discoveries of objects of the given core type. To track agent identity objects, specify core type
Identity.Specify an optional filter predicate to be applied to trackable objects. If the predicate function returns
true, the object is being tracked; otherwise the object is not tracked. If no predicate is specified, all objects corresponding to the given core type are tracked.Remark
Subscriptions to the returned observable are automatically unsubscribed when the communication manager is stopped.
Declaration
Swift
public func observeObjectLifecycleInfoByCoreType(coreType: CoreType, objectFilter: ((CoatyObject) -> Bool)? = nil) -> Observable<ObjectLifecycleInfo>Parameters
coreTypethe core type of objects to be tracked
objectFiltera predicate for filtering objects to be tracked (optional)
Return Value
an observable emitting changes concerning tracked objects of the given core type
-
Observes advertisements, deadvertisments and initial discoveries of objects of the given object type.
Specify an optional filter predicate to be applied to trackable objects. If the predicate function returns
true, the object is being tracked; otherwise the object is not tracked. If no predicate is specified, all objects corresponding to the given core type are tracked.Remark
Subscriptions to the returned observable are automatically unsubscribed when the communication manager is stopped.
Declaration
Swift
public func observeObjectLifecycleInfoByObjectType(with objectType: String, objectFilter: ((CoatyObject) -> Bool)? = nil) -> Observable<ObjectLifecycleInfo>Parameters
objectTypethe object type of objects to be tracked
objectFiltera predicate for filtering objects to be tracked (optional)
Return Value
an observable emitting changes concerning tracked objects of the given object type
-
Advertises the given Coaty object and makes it discoverable either by its
objectTypeorobjectId.The optional
shouldSetParentObjectIdparameter determines whether the parent object ID of the given object should be set to the agent identity’s object ID (default istrue). This is required if you want to observe the object’s lifecycle info by methodobserveObjectLifecycleInfoByObjectTypeand to get notified when the advertising agent terminates abnormally.The returned subscription should be unsubscribed when the object is deadvertised explicitely in your application code (see method
deadvertiseDiscoverableObject). It will be automatically unsubscribed when the communication manager is stopped.Declaration
Swift
public func advertiseDiscoverableObject(object: CoatyObject, shouldSetParentObjectId: Bool = true) -> DisposableParameters
objecta CoatyObject that is advertised and discoverable
shouldSetParentObjectIddetermines whether the parent object ID of the given object should be set to the agent identity’s object ID (default is
true)Return Value
the subscription (of type Disposable) on a DiscoverEvent observable that should be disposed (unsubscribed) if no longer needed
-
Readvertises the given Coaty object, usually after some properties have changed. The object reference should have been advertised before once using the method
advertiseDiscoverableObject.Declaration
Swift
public func readvertiseDiscoverableObject(object: CoatyObject)Parameters
objecta CoatyObject that should be advertised again after properties have changed
-
Deadvertises the given Coaty object and unsubscribes the given subscription resulting from a corresponding invocation of method
advertiseDiscoverableObject.Note that if you want to keep a Coaty object for the whole lifetime of its agent you don’t necessarily need to invoke this method explicitely. Deadvertise events are published automatically by or on behalf of an agent whenever its communication manager is stopped or when the agent terminates abnormally.
Declaration
Swift
public func deadvertiseDiscoverableObject(object: CoatyObject, discoverableSubscription: Disposable)Parameters
objecta CoatyObject to be deadvertised
discoverableSubscriptionsubscription on DiscoverEvent to be unsubscribed
View on GitHub
ObjectLifecycleController Class Reference