Introduction
------------
Simian is a lightweight simulator built on the libOpenMetaverse framework. Its
primary uses are protocol translation and new protocol testing, rapid
prototyping of new designs, a lightweight benchmarking suite, and unit testing
of client applications.
The design of Simian is centered around the one client-facing protocol it
supports. Where OpenSim defines a generic framework to support many backend
simulation systems and many frontend clients, Simian works with the concepts
that the Second Life viewer understands. Avatars, prims, and terrain become the
basic entities of the metaverse. Concepts of space are converted into 256x256
meter squares of terrain. Chat and instant messaging are translated into the
mechanisms used in Second Life. This allows new protocols and behaviors to be
added without having to modify the Second Life viewer directly, or work with the
complex (many-to-many) problem of translating concepts between all virtual
worlds.
Extensions
------------
Extensions can be written in one of three ways.
1) Add a class that inherits from IExtension directly in the Simian project.
Typically this is done by adding a new .cs file in the extensions folder.
2) Create a new assembly containing one or more extensions. The assembly must
follow the naming convention of Simian.*.dll.
3) Put a source code file alongside the running Simian.exe binary that will be
compiled at runtime. The code must follow the naming convention Simian.*.cs.
Look at Simian.ViewerEffectPrinter.cs.example for an example. Remove the
.example extension and put the file alongside the Simian.exe binary to see it
working.
*NOTE*: Extensions will only be loaded if they are listed in the Simian.ini file
in the [Extensions] section. You can comment out extensions, but if an extension
implements an interface and there is no other loaded extension that implements
that interface the Simian server will stop with an error message.
All extensions must inherit from IExtension and have a Start method that
takes a Simian object as the only parameter, along with an empty Stop method.
See the http://code.google.com/p/extensionloader/ project for more details on
writing extensions.