(Forwarding this to vos-d for discussion)

On Tue, Jan 30, 2007 at 02:00:35PM -0500, Reed Hedges wrote:
> 
> This new thing would be like a different kind of listener. Or an 
> additional listener feature.  Many listeners are monitoring the state of 
> something waiting for it to be changed to a certain value or one of a 
> set of values or within a range of values, before actually doing 
> something in response.  This condition checking should be done on the 
> sending site, not the receiving side, so it doesn't have to send every 
> single change to the listener (potentially over the network).
> 
> It would be most immediately useful for properties.  Conditions depend 
> on the datatype.  For example, if an object wants to be notified of when 
> another object comes near it, instead of listening actively to all 
> objects, it sets conditions on those (remote maybe) objects to start and 
> stop listening.

Cool.  I was actually thinking of something similar, in the vein of a 
lightweight condition or query language that could be used for things 
like what you describe as well as searching and selecting objects for 
download.  The idea being for an SQL-like language that only consists of 
boolean clauses, mathematical operations and simple branches (no loops 
or recursion).  This would be easy to prove that it is "safe" since it 
would have bounded runtime and memory usage.  Indeed, this could also be 
an alternative to javascript on the client for UI tasks as it could be 
used to execute simple sequences of operations.

Such a language could be used to define parameterized views -- where 
what the client sees is explicitly filtered to reduce the information 
volume or to reflect a change over some dimension outside the vobject 
model (such as time).

> Does this make sense?
> 
> Also, can you give a brief overview of your ideas for implementing 
> listeners in s5 that you mentioned earlier?

Aside from conditions, a few other proposed changes would be:

a) The "listener" itself must be a vobject, so handling a change event 
is just handling a message.  Interestingly, I think this actually makes 
it easier when you have an application like Ter'Angreal (Interreality 
3D) with a mixture of both VOS and non-VOS objects, which may be subject 
to different concurrency and scheduling restrictions.  This means you 
can direct most of your listener events into one Vobject specifically 
dedicated to the task, rather than having a callback event fire with 
zero context and require the callback to acquire locks or go to 
second-stage scheduling to be able to work safely.

b) I want some way of setting up a listener in just one place, close to 
the root of the scene graph, instead of having to listen to each and 
every vobject in the space individually.  Not only is the current way a 
hassle, it's inefficient and has potential race conditions.  I'm 
thinking that at the world level you would set up some kind of blanket 
listener that expresses an interest in all position updates for the 
world (precisely the kind of case where you want a conditional filter!)

c) For large updates (say over 4-8k), instead of immediately sending out 
new property data, the vobject sends out an invalidation message (I've 
changed, you're out of date) and the remote side has the option of 
deciding whether to go out and fetch the updated value.  The reasoning 
being, beyond a certain point the extra round trip time to fetch the 
value is greatly outweighed by the cost of sending out data that may not 
be used at all.

-- 
[   Peter Amstutz  ][ [EMAIL PROTECTED] ][ [EMAIL PROTECTED] ]
[Lead Programmer][Interreality Project][Virtual Reality for the Internet]
[ VOS: Next Generation Internet Communication][ http://interreality.org ]
[ http://interreality.org/~tetron ][ pgpkey:  pgpkeys.mit.edu  18C21DF7 ]

Attachment: signature.asc
Description: Digital signature

_______________________________________________
vos-d mailing list
vos-d@interreality.org
http://www.interreality.org/cgi-bin/mailman/listinfo/vos-d

Reply via email to