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
coreType
the core type of objects to be tracked
objectFilter
a 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
objectType
the object type of objects to be tracked
objectFilter
a 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
objectType
orobjectId
.The optional
shouldSetParentObjectId
parameter 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 methodobserveObjectLifecycleInfoByObjectType
and 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) -> Disposable
Parameters
object
a CoatyObject that is advertised and discoverable
shouldSetParentObjectId
determines 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
object
a 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
object
a CoatyObject to be deadvertised
discoverableSubscription
subscription on DiscoverEvent to be unsubscribed