From OpenHome
Line 4: | Line 4: | ||
== Overview == | == Overview == | ||
ohTopologyC is a software stack which provides a means of controlling devices, on a local network, via their UPnP service actions. It consists of a number of distinct layers. Each layer focuses on exposing specific properties and actions that are intended to be utilised by the layers above. Clients of ohTopologyC need only interface directly with the highest layer of the stack to gain access to the properties and actions exposed by the lower layers. | ohTopologyC is a software stack which provides a means of controlling devices, on a local network, via their UPnP service actions. It consists of a number of distinct layers. Each layer focuses on exposing specific properties and actions that are intended to be utilised by the layers above. Clients of ohTopologyC need only interface directly with the highest layer of the stack to gain access to the properties and actions exposed by the lower layers. | ||
+ | |||
+ | |||
+ | |||
+ | ==Topology Layer 1 Classes== | ||
+ | ===Topology1=== | ||
+ | Collects a list of devices (with Product Service) from Network and adds itself as a watcher of this list. When a device is added to the list a ProxyProduct (proxy to device's Product service) is created and added to the Topology1 Products list. This list is exposed, for consumption by Topology2, as an IWatchableUnordered. | ||
+ | |||
+ | |||
+ | Encapsulates: list of ProxyProduct | ||
+ | Exposes: list of ProxyProduct (IWatchableUnordered.) | ||
+ | |||
+ | ProxyProduct | ||
+ | ------------ | ||
+ | Encapsulates: | ||
+ | Exposes: actions and properties of a device's Product Service | ||
+ | |||
+ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ||
+ | |||
+ | Topology2 | ||
+ | ========= | ||
+ | Topology2 watches Topology1::Products and updates Topology2Group list whenever a ProxyProduct is added/removed from Topology1::Products | ||
+ | |||
+ | Encapsulates: list of Topology2Group | ||
+ | Exposes: list of Topology2Group (IWatchableUnordered) | ||
+ | |||
+ | Topology2Group | ||
+ | -------------- | ||
+ | Encapsulates: ProxyProduct, list of Topology2Source. | ||
+ | Exposes: list of Topology2Source, subset of actions of ProxyProduct | ||
+ | |||
+ | Topology2Source | ||
+ | --------------- | ||
+ | Encapsulates: Source properties, SourceIndex | ||
+ | Exposes: Source properties, SourceIndex | ||
+ | |||
+ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ||
+ | |||
+ | Topology3 | ||
+ | ========= | ||
+ | Topology3 watches Topology2::Groups and updates Topology3Group list whenever a Topology2Group is added/removed from Topology2::Groups | ||
+ | |||
+ | Encapsulates: list of Topology3Group | ||
+ | Exposes: list of Topology3Group (IWatchableUnordered) | ||
+ | |||
+ | Topology3Group | ||
+ | ============== | ||
+ | Encapsulates: Topology2Group and Topology3Sender. | ||
+ | Exposes: Properties and actions of Topology2Group, Topology3Sender (IWatchable) | ||
+ | |||
+ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ||
+ | |||
+ | Topology4 | ||
+ | ========= | ||
+ | Topology4 watches Topology3::Groups and updates Topology4Room list whenever there is a change to the Room property of any Topology3Group. The Room property of each Topology3Group is monitored by a dedicated Topology4GroupWatcher. | ||
+ | |||
+ | Encapsulates: List of Topology4Room | ||
+ | Exposes: List of Topology4Room (IWatchableUnordered) | ||
+ | |||
+ | Topology4Room | ||
+ | ------------- | ||
+ | Encapsulates: Name property, list of Topology3Group objects with matching room names. | ||
+ | Exposes: SetStandby action, Name property, list of Topology3Group. | ||
+ | |||
+ | |||
+ | Topology4GroupWatcher | ||
+ | --------------------- | ||
+ | Updates Topology4 upon Room property change of Topology3Group | ||
+ | |||
+ | Encapsulates: Topology3Group | ||
+ | Exposes: None | ||
+ | |||
+ | |||
+ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ||
+ | |||
+ | Topology5 | ||
+ | ========= | ||
+ | Topology5 watches Topology4::Rooms, updating its Topology5Room list whenever a Topology4Room is added/removed. | ||
+ | |||
+ | |||
+ | Encapsulates: list of Topology5Room | ||
+ | Exposes: list of Topology5Room (IWatchableUnordered) | ||
+ | |||
+ | Topology5Room | ||
+ | ------------- | ||
+ | Topology5Room watches Topology4Room::Groups updating Topology3Group list whenever a Topology3Group is added/removed. The Standby, Name and Sources properties of each Topology3Group are then watched for changes. A dedicated Topology5GroupWatcher is employed to monitor Name and Sources of each group. Although the Standby state of each group is boolean, Topology5Room exposes a tristate Standby property. This is to accommodate a third state "mixed" when there is an inconsistent Standby state across all groups in the room. The Topology3Group list is used to maintain a corresponding Topology5Group list, a subset of which is exposed as a Roots list. A Root (ITopology5Root) is defined as a Topology5Group that does not have a Parent group. A super list of all Sources of every Root in the Room is exposed as Sources. |
Revision as of 16:57, 13 February 2015
ohTopology
Contents |
Overview
ohTopologyC is a software stack which provides a means of controlling devices, on a local network, via their UPnP service actions. It consists of a number of distinct layers. Each layer focuses on exposing specific properties and actions that are intended to be utilised by the layers above. Clients of ohTopologyC need only interface directly with the highest layer of the stack to gain access to the properties and actions exposed by the lower layers.
Topology Layer 1 Classes
Topology1
Collects a list of devices (with Product Service) from Network and adds itself as a watcher of this list. When a device is added to the list a ProxyProduct (proxy to device's Product service) is created and added to the Topology1 Products list. This list is exposed, for consumption by Topology2, as an IWatchableUnordered.
Encapsulates: list of ProxyProduct
Exposes: list of ProxyProduct (IWatchableUnordered.)
ProxyProduct
Encapsulates: Exposes: actions and properties of a device's Product Service
Topology2
=
Topology2 watches Topology1::Products and updates Topology2Group list whenever a ProxyProduct is added/removed from Topology1::Products
Encapsulates: list of Topology2Group Exposes: list of Topology2Group (IWatchableUnordered)
Topology2Group
Encapsulates: ProxyProduct, list of Topology2Source. Exposes: list of Topology2Source, subset of actions of ProxyProduct
Topology2Source
Encapsulates: Source properties, SourceIndex Exposes: Source properties, SourceIndex
Topology3
=
Topology3 watches Topology2::Groups and updates Topology3Group list whenever a Topology2Group is added/removed from Topology2::Groups
Encapsulates: list of Topology3Group Exposes: list of Topology3Group (IWatchableUnordered)
Topology3Group
==
Encapsulates: Topology2Group and Topology3Sender. Exposes: Properties and actions of Topology2Group, Topology3Sender (IWatchable)
Topology4
=
Topology4 watches Topology3::Groups and updates Topology4Room list whenever there is a change to the Room property of any Topology3Group. The Room property of each Topology3Group is monitored by a dedicated Topology4GroupWatcher.
Encapsulates: List of Topology4Room Exposes: List of Topology4Room (IWatchableUnordered)
Topology4Room
Encapsulates: Name property, list of Topology3Group objects with matching room names. Exposes: SetStandby action, Name property, list of Topology3Group.
Topology4GroupWatcher
Updates Topology4 upon Room property change of Topology3Group
Encapsulates: Topology3Group Exposes: None
Topology5
=
Topology5 watches Topology4::Rooms, updating its Topology5Room list whenever a Topology4Room is added/removed.
Encapsulates: list of Topology5Room
Exposes: list of Topology5Room (IWatchableUnordered)
Topology5Room
Topology5Room watches Topology4Room::Groups updating Topology3Group list whenever a Topology3Group is added/removed. The Standby, Name and Sources properties of each Topology3Group are then watched for changes. A dedicated Topology5GroupWatcher is employed to monitor Name and Sources of each group. Although the Standby state of each group is boolean, Topology5Room exposes a tristate Standby property. This is to accommodate a third state "mixed" when there is an inconsistent Standby state across all groups in the room. The Topology3Group list is used to maintain a corresponding Topology5Group list, a subset of which is exposed as a Roots list. A Root (ITopology5Root) is defined as a Topology5Group that does not have a Parent group. A super list of all Sources of every Root in the Room is exposed as Sources.