Joined: 08 May 2003
|Posted: Tue Aug 15, 2006 8:54 am Post subject: Differences between ABNet 1 and ABNet 2
|There has been a lot of confusion about ABNet over the years.
ABNet is not an updated version of VNet+. It is completely
different source code written by Rick Kimball.
ABNet 1.0 was release in 2002. It didn't change much from
2002-2006. Hopefully, I can explain some of the new features
of ABNet 2 and how they differ from ABNet 1.
ABNet 1.0 was written after Microsoft and Sun got into a pissing match
and Microsoft stopped distrubuting the MS Java VM. Unfortunately,
most of the major VRML vendors, such as Blaxxun, ParallelGraphics,
and Bitmangement, had taken advantage of the great COM support built
into the MS Java VM. Unfortunately, Java EAI stopped working
with the VRML scene when using Microsoft Internet Explorer and
the Sun Java VM.
ABNet 1 was my first attempt at allowing worlds to be shared using
the COM interface built into Blaxxun Contact. Instead of using Java
page that called the Blaxxun setNodeEventIn functions. The downside
was that the older versions of Contact 5.X and below had a bug that
didn't let you add VRML dynamically and then access those newly
In ABNet 1.0, I overcame that problem by writing abnet.wrl.
As long as the nodes existed when Contact started, you could use
the setNodeEventIn from the HTML page. The functions in ABNet.wrl
provided a sort of interface that allowed me to add and remove worlds
and avatars dynamically.
The downside of abnet.wrl from ABNet 1.0 was that it interferred with
the worlds you loaded. I had to write a lot of code in abnet.wrl that
would walk the scene graph. Sometimes it got it right, sometimes
it didn't. I really didn't like the way it worked but in general
... ok enough history
Roll the clock forward to 2006, ABNet 2 is my second attempt,
actually my third attemp if you count VNet+. Blaxxun Contact became
Bitmanagement Contact. Starting with release 6.0 of BS Contact,
the previous limitation of not being able to access dynamically added
nodes is gone. Flux player goes open source and provides an SAI
interface similar but different to Contact. They both support both
VRML and X3d. ABNet 2 was written to take advantage of these
One of the biggest differences between ABnet 1.0 and 2.0 is
version 2.0's ability to host multiple worlds from one ABNet
server. ABNet 1.0 could only handle one world per server.
Although vrmlworld.net made it appear that it supported
mulitple worlds, it was a trick done with mirrors. Vrmlworld.net
had multiple servers running, actually about 8 of them
each running on its own TCP port. That was kind of wastefull,
but made the server very simple. ABNet 2.0 provides good support
for automagically configured chat zones. Firewalls only need to
open one TCP port to accept inbound connections for more worlds.
It is a good thing.
ABNet 2 doesn't use the abnet.wrl file anymore. It doesn't need it.
It still adds nodes to the scene dynamically. However, it is much
page adds a few custom ABNet VRML nodes to the scene.
ABNet_PS, ABNet_S1, ABNet_Avatar, and ABNetSharedEvents.
ABNet_PS is a proximity sensor. Its job is to keep track of your
location and orientation in the scene. When you move, it triggers
an event to the ABNet_S1 (Script 1).
ABNet_S1 handles sending your movement events to the HTML page.
Instead of sending an event every time you move, ABNet_S1 acts as
a limiter and only sends your changed movements based on a timer.
The default is to send a maximum of 3 movements per second. However,
all you do is change the timer interval and you can either send more
or less events.
ABNet_Avatar is used when someone joins or leaves the scene. It takes
care of loading the avatar and queries the location of the avatar
once it finally loads. Sometimes there is a significant delay between
when an avatar starts to load and when it actually is finished.
ABNet_SharedEvents provides the ability to send shared events to
everyone in the scene. To use this you have to load the correct
protos.wrl file from vrmlworld.net ... I'll write more about using
shared events later. It is very similar to the way shared events
worked in ABNet1 and looks somewhat familiar to people who have used
Blaxxun shared events.
So with ABNet 2, the overall architecture it is less constricted.
Your world is the first thing to load. This fixes viewpoint
and anchor problems I could never address with ABNet 1.0.
With ABNet2, if you have an Anchor node that loads another vrml/
x3d scene. It automatically replaces the current scene. The worlds at
http://web3chat.com/wrl.wrl work great now. In ABnet 1.0 I always had
problems with worlds from that site. Each wrl becomes its own chat
zone. That means each wrl file gets its own chat group automatically.
This should allow people to make large interconnected worlds without
having to think too hard. Imagine a plaza type world with houses.
If you click on house using an Anchor world. You would automaticallly
disconnect from the plaza world chat and join the chat for that
specific house. Assuming it was in a different wrl file. You could
do the same thing with Proxmity Nodes. Seamless world transitions
could happen automagically.
ABNet 2 provides an ActiveX client. This means you don't have
to have a 48MB java runtime eating up all your CPU and memory.
The ABNet2 ActiveX client is only about 200k. It is written in C++
so it significantly faster than the java applet. When you call the
functions in the ActiveX control there isn't a context process
switch. The ActiveX control is a dll loaded into the address space
of the MSIE browser. With ABNet 1 and the Java applet, each
time you called one of the Java functions, it caused a process
context switch and it had to marshall any data that was sent
to the java vm. This is what made it feel klunky sometimes.
As time goes on, I can see adding methods to it that would have
been painful with java. I can see adding a text to speech option
using something like the Microsoft Voice SDK, or maybe reading
and writing to the user's hard drive. However, at the moment,
the ActiveX client avoids accessing the harddrive.
With the ABNet 1 and the Java Applet you could only connect to a chat
server on the same machine that hosted the applet.
With ABNet2 and the ActiveX client, the chat server can be selected.
By default, it does try to connect to the host that provided the page,
however you can use a function to change it to point to any host.
This will allow people to make their own custom html pages and host
them on any web server. You could then use the chat server at
vrmlworld.net if you didn't want to run your own ABNet 2 server.
The author of the HTML page would be able to control their user
ABNet 2 makes it possible to create some wildly different user
interfaces. The one I have supplied right now does the minimum
to support 3d multi user chat. However, I can see people using the
underlying framework to create user interfaces that might look similar
to Second Life.
I look forward to people enhancing what I've done and helping me to
take it to the next level.
Last edited by admin on Sun Jan 21, 2007 11:28 am; edited 2 times in total