All contexts of an AggreGate Server dwell in a hierarchical structure called context tree. In this tree, each context has a name, that is its unique ID within its parent, and a path, that is the context's unique ID within the server.
Since all contexts implement the unified interface, they can interoperate within the server context tree, offering an unprecedented level of flexibility.
Distributed architecture expands interoperation throughout the network, allowing different servers to exchange parts of their context trees.
Tables are flexible enough to hold any kind of data:
- Scalar values (numbers, strings, dates, etc.) are represented by single-cell tables
- Arrays are represented by single-column tables
- Structures are represented by single-row tables
- Streams are handled as special tables of the unlimited length
- And, finally, tabular data is stored "as is"
Each data table has a specific format describing the table fields and general properties.
Cells of data tables may contain the nested tables, making it possible to use a single top-level table to represent an object of whatever complexity.
Drivers and agents create a normalized presentation of various hardware devices and data sources. In this case, variables are internal settings of the device, functions are operations that the device can perform, and events are notifications the device can send to inform the server of changes detected in internal or external operating conditions.
Virtually any device or system object can be described as a set of variables, functions and events. For example, a smart remotely-controlled water tank can have a “water level” variable to reflect the current amount of water in the tank and “turn the valve on/off” functions to control the valve that lets water into the tank. This smart water tank can also generate a number of events, such as “nearly empty”, “nearly full”, and “overflow”.