More and more of the Region to UGAIM comms and Region to Region comms, is being 
moved out of the Comms Manager and into region modules. Is this a process we 
should continue and move everything out of there and into Region modules? 

I'm a bit torn on that issue, and I think a few other people are too. We all 
know the current comms manager system is not the best :)  And its a real pain 
to customise. 

One issue with having it all in region modules, is that everything has to go 
through regions to be able to use those interfaces. Making it harder for app 
plugins to do any comms related work. 

So if we decide to stick with a separate comms system (rather than moving it to 
region modules), how can we improve it?

I think the first two tasks are:
* to improve the interfaces/make it easier to extend.
* and to make it so its loaded from plugins/dlls. 

One simple way of allowing plugins to create and setup the Comms Manager would 
be making some small changes to the IApplicationPlugin interface:

* Add a PostInitialise method to that interface. 
* Then changing the LoadRegionsPlugin so that it created the regions in the 
IApplicationPlugin.PostInitialise call. 
* Which would allow us to create some SetupCommsManagerPlugins which could do 
its work in the IApplicationPlugin.Initialise() call.

[Note that brings up another issue that I want to deal with in another email 
soon... of how do we define which plugins are loaded. And also if there are 
multiple plugins, of the same type, in a single dll, how do we make some of 
them get loaded but not others?]

The next task would be to improve the interfaces of the Comms Manager and allow 
it to be expanded easier.

The current set of interfaces in the Comms manager are:

public class CommunicationsManager
{
        public IUserService UserService
        public IMessagingService MessageService;
        public IGridServices GridService
        public UserProfileCacheService UserProfileCacheService
        public IAvatarService AvatarService
        public IAssetCache AssetCache
        public NetworkServersInfo NetworkServersInfo     
        public IUserAdminService UserAdminService'    
        public BaseHttpServer HttpServer;
}

I propose making it so the CommsManager also implements the IGridServiceCore 
interface which I've added to the User/Grid/Messaging servers, as part of the 
process of modulising them.

public interface IGridServiceCore
 {
        T Get<T>();
        void RegisterInterface<T>(T iface);
        bool TryGet<T>(out T iface);
        BaseHttpServer GetHttpServer();
 }

Then the components of the CommsManager can register themselves with that, and 
request other interfaces/Components. At the moment it would still need the old 
interfaces to be assigned, as external code use them. But over time, we should 
then change the external code so they use the TryGet<T>(out T iface) call when 
they want one of the interfaces/Components. 

So eventually the CommsManager will basically just be that interface and a set 
of "modules" loaded and registered with it. 

This brings the CommsManager more in line with the Region module system and the 
IClientCore and soon to be in use UGM servers system. We could even make it so 
it could load the same modules as the UGM servers use if we wanted to. 

So thoughts, comments, bad fruit being thrown wanted.
      



      
_______________________________________________
Opensim-dev mailing list
Opensim-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/opensim-dev

Reply via email to