interreality.org [VOS]
[Home] [About] [Screenshots]
[Download] [News]
[Documentation]
[Forums] [IRC] [Mailing Lists]
[Bug Reporting] [Wiki]

To make VOS more immediately useful to applications, and to help developers get the most out of the unique capabilities of VOS, we should start building useful higher level classes that implement event listeners, access control, etc.

Listener Library

Listener tools should also be metaobjects that allows you to set them up remotely.

Users can set these up to generate more active or dynamic vobject structures within a particular application, or apps can use them internally:

Utility Listeners

Listeners that help you make other listeners, or are more featureful subclasses of the basic listener primitives. These need better names.

  • ChildSublistener. A ChildListener for an object O with optional parameters T, N. If a child C is inserted into O, create a new listener L, store it in a map associating (C, L), and add L to C. If C is removed from O, remove L from C and destroy L. Optional parameters: C must have a type T, and/or C must have contextual name N.

  • TypeSublistener [need a better name. TypeCondition?]. A TypeListener for an object O. Keep a listener instance L. If a type T is added to O, and add L to O. If type T is removed from O, remove L from O.

Vobject Synchronization Listeners

Synchronization listeners, with various policies. e.g. for any child added to Vobject A, add it as a child to Vobject B, perhaps with a type check. Or, do that unless a child with the same contextual name already exists in Vobject A. This will be useful for Hypervos to collect all xml:html pages into a group. (See HyperVosIdeas)

  • simple union
  • sorted version of other object.
    • also just a "keep this sorted" listener
  • uniq
    • also a "keep this unique" access policy or utility function for other tools to use
  • transpose:
    • obj1 {child1-1, child1-2, child1-3}, obj2 {child2-1, child2-2, child2-3} => children-1 {child1-1, child2-1}, children-2 {child1-2, child2-2}, children-3 {child1-3, child2-3}.

  • flatten: recursively add all descendents of input property
  • gather: get links to children of target objects that have a certain name and/or certain type(s)
  • Could also use Vobject revision control features to keep a derived branch of
    • some Vobject collection updated with changes from its parent version, but also allow local changes. (Then you can later sync it back or something.)

For various of the above filters, could also have criteria, e.g. skip or only include children based on name or type?

Property Filters

See PropertyFilters

Other property tools

  • Very easy to use property listener that writes new value to variable using a stored pointer, also with pre- and post- function hooks. (e.g. to lock/unlock mutex). optionally use vref or std::auto_ptr to store the pointer. support various data types. automatically destroy self if property is destroyed.
  • A property that searches a subtree of objects for some match (e.g. by contextual name and/or type(s)) and writes its own value to those matching objects

Misc.

  • Automatically create image-attributes child of a property if it has

an "image" datatype, with properties like width, height, and other metadata read from the file added to the image-attributes list.

  • Message pipelining. Determine output destinations of different messages, to set up a pipeline of processing if the objects have message handler scripts or plugins for the message. (Otherwise just pass it on.)
  • For revision control: send a message to some target object if a property changes *and* it's different from previous revision.
  • => Any autogenerated objects should have a tag type applied so that UIs can indicate such to the user

  • Function to recursively add a listener (child, type or property) to a vobject and all of its children
  • Listener that recursively adds itself to a vobject and all of its children, takes care of removing itself when neccesary (i.e. remove property listener if child removed), and proxy notifications to user's listener(s). This is basically an easier to use object than doing all this manually or using the previously mentioned recursive function.
  • Subclasses of property that:
    • initially is just a proxy to another property until you tell it otherwise, in which case it duplicates the other property's value, and replaces it in certain parents.
    • is a "copy on write" property. also need to have a particular parent in mind for the copy/replace.
  • Access policy or filter that delays an event for some time (and pending events are stored in children, optionally, so they can be viewed and reordered and time changed and cancelled)
  • Listener that stores a compact reperestation of the topology of its
    • decendents, with (optionally) names, types and/or URLs. (e.g. in a lisp-like list). This can then perhaps be used for more efficient search queries, and for analysis tools. Or, variant, build a hash out of all descendends names and optionally types, or just the topology with no metadata so you can just do a comparison against stored hashes or between two different parents that might be different.

Hypervos tools

Automatically listen to html object, and if it becomes a metadata object, create <meta> elements when metadata children are added.

Trigger message sending

Listen for child or property events, and send some message to a number of other objects. E.g. iterate over a set of talkative objects sending them "say" commands with new property data or the name of a new object.

Metaobject child structure:

  • misc:message-trigger-listener [property, value=property-listener|child-listener|type-listener|parent-listener]
    • method [property value=method name]
      • fields
        • ...properties...
    • targets
      • ...objects...

For A3DL Objects (add to libmetaobject_a3dl)

Listen for object proximity, object becomes visible by a user, collision detection, point object at closest other 3d object with some type (e.g. avatar).

User Control Tools

Tools available for quick insertion into a wxWidgets menu or other interface, that automate Vobject management tasks that would otherwise be tedious for users to do manually, including tools that create and activate the above listeners.

See also VobjectEditingGui.

Access Control Policies, in libvostoolbox

Need more access control policies implemented, see this page: MoreAccessControlPolicyClasses.

Subsumption Architecture?

Mechanism for several functions or message handlers periodically or repeatedly invoked serially but whose return values are combined using some policy resulting in a final change on an object (e.g. change property value). E.g. weighted average.

Message relays

There's more about this in other wiki pages, they ought to be consolidated...

Objects that: * Relay incoming messages to each child object * Relay that maps one message method and args to another * Relay that adds new message fields

Matrix Representation in Vobjects

Tools to do matrix operations on Vobjects (and listeners that maintain transformations of other matrices), where the Vobject tree serves as a sparse matrix storage methtod.

Misc.

Accept talkative or other messages, and format and send a message out as email or an IM or other external system.

Also, the inverse: given an email message, parse it for some trigger text to format the mail message into a vos message to send to some target object. (And have a small progrram that does that).)

ApplicationVosToolbox (last edited 2008-04-20 22:38:46 by ReedHedges)