Firefox doesn't depend on the server implementation, and neither
should we. Unfortunately however, we don't have HTTP to insulate us,
so we are forced to allow protocol specific elements into our code
base.
The question is what attractions can we use in order to keep as much
of our code base as possible nonspecific?
For us this question is now practical, as we are now implementing
three grid level protocols (OpenSim, Cable Beach/OpenID, and reX
Legacy), and one real-time streaming protocol (reX-modified SL UDP).
The first big distinction we make is between world Session and world
Streaming protocols.
A session protocol consists of a series of transactions in order to
set up an authorized, real-time, stream between client and server. A
stream protocol consists of a series of real-time messages used to
replicate state and events between client and server.
A session manager is handed a set of credentials in an address of a
trust the main authority, who negotiates entrance of the credentials
into the trust authority, negotiates a shared set of capabilities, and
request initiation of matching stream endpoints.
We stream and points established, a translation module includes
internal viewer events as real-time messages, and pumps them upstream.
In support of this abstraction, we will implement an RPC manager, that
will handle both XML RPC and REST-based RPC, and a data-driven UDP
encoder.
This should be enough to suit our current needs, but you believe that
that's enough to support your individual protocols as well? Do you see
any holes? Am I missing anything?
Let me know what you think.
Cheers,
In support of this abstraction, we will implement an RPC manager, that
will handle both XML RPC and REST-based RPC, and a data-driven UDP
encoder.
That what shows up on UDP is driven by a text file as opposed to
compiled C++ logic.
In specific, we use SL's message_template.msg. This could also mean
protocol buffers or other similar ideas.
>
> One suggestion I can make is to check for ease of use with ENet (an
> MIT-licensed hi-speed UDP-based networking library, used by a lot of gaming
> projects, including mine). In other words, if it's easy to use ENet with
> Naali, that would be a great sign of multiprotocol potential.
>
> Of course that is just the very low-level stuff, the real challenges are
> supporting the higher-level functionalities of multiple protocols (different
> updates/entities/worlds, etc.).
>
> - kripken
I'll take a look at Enet and presume it's interface is similar to
sirikata's and yours.
Cheers,