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

Mesh

Mesh stands for "MEtaobject SHell", and is a powerful command-line client for interacting with VOS sites. With Mesh you can edit every aspect of a Vobject, edit properties, interact with access control (including logging in to remote sites) and save and load sites to/from COD files. Mesh supports interactive command-line editing using libreadline, and like OmniVOS it can load plugins to extend its command set.

This web site was built using Mesh to create and edit Vobjects which form an XML (HTML) document when assembled by HyperVOS.

Here is an example Mesh session, copied in part from garou's getting-started tutorial currently taking shape on the Wiki. To begin, we run mesh from a system terminal with the URL of an object we are interested in:

 $ mesh vip://nexus/world
 vip://nexus:4231/world> 

"vip" is the VOS Infrastructure Protocol, the protocol VOS objects use to communicate over a network. "nexus" is the hostname of a computer running a VOS site on the defaut port (4231). "world" is the name of a VOS object (Vobject) on that site. We're in. So let's look at what we are in. Use ls, just like a Unix shell.

 
 vip://nexus:4231/world> ls
 #0: a3dl:fog-density -> vip://nexus:4231/a3dl:fog-density [property:property]
 #1: a3dl:fog-color -> vip://nexus:4231/a3dl:fog-color   [property:property]
 #2: a3dl:ambient-light -> vip://nexus:4231/a3dl:ambient-light [property:property]
 #3: test light -> vip://nexus:4231/light        [a3dl:light]
 #4: roomtest -> vip://nexus:4231/outerwalls     [a3dl:object3D.polygonmesh, a3dl:static]
 #5: ball -> vip://nexus:4231/ball   [a3dl:object3D.sphere]
 #6: cone -> vip://nexus:4231/cone   [a3dl:object3D.cone, misc:hypercard]

These VOS objects describe a 3D world, using the A3DL Metaobject type set, as well as the very important "property" Metaobject type.

vip://nexus:4231/world> cd ball
 vip://nexus:4231/world/ball> ls
 #0: a3dl:material -> vip://nexus:4231/a3dl:material_1445977090 [a3dl:material]
 #1: a3dl:position -> vip://nexus:4231/a3dl:position_645959510 [property:property]
 #2: a3dl:orientation -> vip://nexus:4231/a3dl:orientation_1796436417 [property:property]
 #3: a3dl:scaling -> vip://nexus:4231/a3dl:scaling_392619147 [property:property]

 vip://nexus:4231/world/ball> @a3dl:material ls
 #0: a3dl:color        [property:property]
 #1: a3dl:alpha        [property:property]

Mesh has a set of commands for working with property type objects:

 vip://nexus:4231/world/ball> cd a3dl:position
 vip://nexus:4231/world/ball/a3dl:position> prop read
 Value: -2.000000 0.000000 1.000000
 Type: list: float
 vip://nexus:4231/world/ball/a3dl:position> prop replace "5 5 5"
 vip://nexus:4231/world/ball/a3dl:position> prop read
 Value: 5 5 5
 Type: list: float
 vip://nexus:4231/world/ball/a3dl:position> prop replace "0 4.62 0.5" "Fnord"
 vip://nexus:4231/world/ball/a3dl:position> prop read
 Value: 0 4.62 0.5
 Type: Fnord

Actually, let's use the proper datatype for a list of numbers:

 vip://nexus:4231/world/ball/a3dl:position> prop replace "0 4.62 0.5" "list: float"
 vip://nexus:4231/world/ball/a3dl:position> prop read
 Value: 0 4.62 0.5
 Type: list: float

It also has commands for associating with identities and for changing access controls:

 vip://nexus:4231/world> cd cone/a3dl:material/a3dl:color
 vip://nexus:4231/world/cone/a3dl:material/a3dl:color> acls
 Policy: core:accept-all,property:accept-all
 identity: vip://nexus:4231/some_user

 Policy: core:read-only,property:accept-all
 Group: vip://nexus:4231/some_group

If we associate with the "some_user" identity or the "some_group" group then we will be able to have full access to the object, or read-only access to the object as a Vobject, but full access to it as a property, respectively.

 vip://nexus:4231/world/cone/a3dl:material/a3dl:color> pushd /some_user
 vip://nexus:4231/some_user> passwordauth
 Password: ******
 vip://nexus:4231/some_user> popd
 vip://nexus:4231/world/cone/a3dl:material/a3dl:color> prop replace "1 0 0" "list:float"

Now the cone will be red. Since VOS and properties are based on a listener pattern, with updates automatically pushed to remote listeners, a 3D client can immediatly reflect the change on the screen.

Hopefully this gives you a glimpse into how VOS is used and how to use Mesh to work with it. For a complete, in-depth description of VOS and how it works, a complete list of mesh commands and usage, how to program with it in C++ and also how to use some of the other applications, see Creating Interreality, the VOS Manual, on the documentation page. During a Mesh session, the help command will list all available commands.

Mesh Status

Supports manipulating all aspects of Vobjects. Complete. Used for working with just about everything else in VOS, including to compose this web site.