Hi,

note that I used IScene sxclusively?

Melanie

Stefan Andersson wrote:
> Um, yeah, having 'Scene' as a type in anyhting outside of the Region will 
> lead to grief.
> 
> 
> Suggestion:
> 
>  
> 
> --- OpenSim.Framework: ---
> 
>  
> 
> IGenericModule
> 
> {
> 
>   Initialise();
> 
>   PostInitialise();
> 
> }
> 
>  
> 
> --- OpenSim.Region.Framework: ---
> 
>  
> 
> IRegionModule : IGenericModule
> 
> {
> 
>    OnNewScene();
> 
>    OnSceneRemoved();
> 
> }
> 
>  
> 
> Best regards,
> Stefan Andersson
> Tribal Media AB
> 
> 
> 
>  
> 
> 
> Date: Thu, 26 Feb 2009 12:15:18 +0000
> From: michaelwr...@yahoo.co.uk
> To: opensim-dev@lists.berlios.de
> Subject: Re: [Opensim-dev] Comms Manager
> 
> 
> 
> 
> 
> I still question if Global modules (that are really providing global 
> services) should get any references to Scene/IScene; either by events of 
> initialisation calls. If they are providing services, then other 
> modules/components should be consumers of them, so only the consumers need 
> references to the providers. Not the providers having references to the 
> consumers.
> 
> But I guess that depends on what we see these global modules as being able to 
> do.
> 
> --- On Thu, 26/2/09, Stefan Andersson <ste...@tribalmedia.se> wrote:
> 
> From: Stefan Andersson <ste...@tribalmedia.se>
> Subject: Re: [Opensim-dev] Comms Manager
> To: "opensim-dev@lists.berlios.de" <opensim-dev@lists.berlios.de>
> Date: Thursday, 26 February, 2009, 11:59 AM
> 
> 
> 
> 
> I'm actually with Melanie on this; using the call-back registration and event 
> attachment seems so much flexible and cleaner - and more in line with where 
> the region modules have been taking us.
> 
> Best regards,
> Stefan Andersson
> Tribal Media AB
> 
> 
> 
>  
>> Date: Thu, 26 Feb 2009 11:56:31 +0000
>> From: mela...@t-data.com
>> To: opensim-dev@lists.berlios.de
>> Subject: Re: [Opensim-dev] Comms Manager
>> 
>> You just can't let go of the centralistic *Manager idea..!
>> 
>> IMHO, clients have no business at app level. Clients connect to 
>> regions through client stacks. Which can be shared modules for 
>> constellations where one client connection handles all regions in an 
>> instance.
>> 
>> IGlobalModuleRegistry
>> {
>> Initialise();
>> RegisterModuleInterface<T>(T instance);
>> RequestModuleInterface<T>();
>> 
>> // Triggered whan a Scene is loaded
>> OnNewScene(IScene);
>> InRemoveScene(IScene);
>> }
>> 
>> IScenesTrackerModule : IGlobalModule
>> {
>> Initialise();
>> List<IScene> Scenes { get; }
>> IScene FindSceneByName(string name);
>> IScene FindSceneByUUID(UUID sceneID);
>> .....
>> }
>> 
>> See? That scenes module is actually loaded and registers as a 
>> perfectly normal module inthe module registry.
>> It builds and maintains a scene list automatically by means of the 
>> OnNewScene and OnRemoveScene events!
>> 
>> Easy. No mess with contained classes and having to edit the 
>> container all the time.
>> 
>> I hate:
>> 
>> SomethingClass
>> {
>> IWhatever whatever;
>> ISoWhat sowhat;
>> }
>> 
>> It cements a structure that could be inappropriate a month from now.
>> 
>> Melanie
>> 
>> Melanie
>> 
>> Frisby, Adam wrote:
>> > My thoughts:
>> > 
>> > IGlobalModule {
>> > Initialise(ModuleManager x)
>> > Start()
>> > Stop()
>> > }
>> > 
>> > ModuleManager {
>> > SceneManager,
>> > ClientManager,
>> > ModuleInterfaces<T>
>> > }
>> > 
>> > From: opensim-dev-boun...@lists.berlios.de 
>> > [mailto:opensim-dev-boun...@lists.berlios.de] On Behalf Of Stefan Andersson
>> > Sent: Thursday, 26 February 2009 3:00 AM
>> > To: opensim-dev@lists.berlios.de
>> > Subject: Re: [Opensim-dev] Comms Manager
>> > 
>> > ... did we not just come full circle?
>> > 
>> > I believe were all in agreement here, just varying on what to call stuff 
>> > and exactly what stuff they should be connected to.
>> > 
>> > I'm confident all that will sort itself out. I think we have established a 
>> > roadmap though.
>> > 
>> > Best regards,
>> > Stefan Andersson
>> > Tribal Media AB
>> > 
>> > 
>> > 
>> > 
>> >> Date: Thu, 26 Feb 2009 10:40:34 +0000
>> >> From: mela...@t-data.com
>> >> To: opensim-dev@lists.berlios.de
>> >> Subject: Re: [Opensim-dev] Comms Manager
>> >>
>> >> What Adam said.
>> >>
>> >> That is precisely what I am thinking of, and what we all, in a bog
>> >> discussion, already once agreed on, when Diva asked and we decided
>> >> that interregion comms should be a module.
>> >>
>> >> I believe the comms needs of an application plugin are different
>> >> from a region module's needs. I see no issue in haveinf _different_
>> >> comms code in different places.
>> >>
>> >> I do agree that code duplication should be avoided.
>> >>
>> >> But I'm also taking a firm stand on CommsManager. CommsManager, as
>> >> it is, needs tremendous effort to extend, and non-core code can not
>> >> ever hook into it, because it has a fixed set of interfaces linked
>> >> in. That is badness.
>> >>
>> >> So, I think I have a solution:
>> >>
>> >> Refactor all services currently in comms manager into region modules
>> >> _or_ application plugins, depending on where it's used. Basically,
>> >> everything that is only used by regions should be a region module.
>> >>
>> >> Rewrite comms manager as a registry of intefaces, that application
>> >> plugins can register services with.
>> >> This will be those comms manager services that are truly application
>> >> level, means, are used by things other than regions, before regiosn
>> >> are started, or in instances without regions.
>> >>
>> >> Now, each application module gets an event on creation of a scene
>> >> anyway. So, thay can Scene.RegisterModuleInteferce<IWhatever>(this)
>> >> with each new scene created, and offer their services to Scenes as well.
>> >>
>> >> If code was originally written as a region module, but is later
>> >> found to be useful without regions (XMLRPC RemoteAdmin is one that
>> >> comes to mind!), it can easily be moved to this interface and then
>> >> publish itself to regions to provide region comms as well.
>> >>
>> >> In the case of RemoteAdmin, it's comms code (yes, a StreamHandler!)
>> >> would be in an application plugin, exposing an IRemoteRegionAdmin to
>> >> each region connected. A region module that does the region part of
>> >> the work would grab that interface to access the underlying
>> >> communications.
>> >> That would also provide a very clean separation, as the application
>> >> plugin can't execute anything on Scenes, because it has IScene only
>> >> and doesn't ref Scene itself at all. Therefore it would be comms
>> >> only, and the region module talking to it would be no comms at all.
>> >> This seems logical because that way an instance with no active
>> >> regions could still execute a create region command... that would be
>> >> unavailable if no region was loaded at all!
>> >> As Homer goes to refactor region loading and region modules, this
>> >> will become more important.
>> >>
>> >> Again, I'm -1000 on having a monolithic component that requires core
>> >> code edits to extend, but open to a solution as described above,
>> >> which, IMHO, combines all that was said so far in a neat package.
>> >>
>> >> Melanie
>> >>
>> >>
>> >> Stefan Andersson wrote:
>> >> > I think that's what Melanie is leaning towards, but that would mean 
>> >> > every module would have to be connected to at least one scene.
>> >> >
>> >> >
>> >> > I do believe that you would have modules doing stuff already from a 
>> >> > setting where there is no scenes loaded.
>> >> >
>> >> >
>> >> >
>> >> > The regionLoader, for example. :D
>> >> >
>> >> > Best regards,
>> >> > Stefan Andersson
>> >> > Tribal Media AB
>> >> >
>> >> >
>> >> >
>> >> >
>> >> >
>> >> >
>> >> > From: a...@deepthink.com.au
>> >> > To: opensim-dev@lists.berlios.de; michaelwr...@yahoo.co.uk
>> >> > Date: Thu, 26 Feb 2009 05:21:48 -0500
>> >> > Subject: Re: [Opensim-dev] Comms Manager
>> >> >
>> >> >
>> >> >
>> >> >
>> >> >
>> >> >
>> >> >
>> >> > Do we need the comms manager?
>> >> >
>> >> > Can't we just register them individually via 
>> >> > Scene.RegisterModuleInterface, then pull what we want when we need it?
>> >> >
>> >> > Adam
>> >> >
>> >> >
>> >> >
>> >> >
>> >> > From: opensim-dev-boun...@lists.berlios.de 
>> >> > [mailto:opensim-dev-boun...@lists.berlios.de] On Behalf Of Stefan 
>> >> > Andersson
>> >> > Sent: Thursday, 26 February 2009 2:10 AM
>> >> > To: Michael Wright; opensim-dev@lists.berlios.de
>> >> > Subject: Re: [Opensim-dev] Comms Manager
>> >> >
>> >> > Actually, I think the various 'module types' should bee seen as 
>> >> > reflecting on what system resources will be made available to those 
>> >> > modules - both as a conveniense (better suited API entrypoints) and for 
>> >> > security (being able to set policies on modules)
>> >> >
>> >> > Also, I very much see these repository functions that we are looking at 
>> >> > as taking care of 'configuration' - ie, to make sure that the module 
>> >> > code don't have to take care of, or know anyhting about, the 
>> >> > configuration of other parts of the system.
>> >> >
>> >> > Best regards,
>> >> > Stefan Andersson
>> >> > Tribal Media AB
>> >> >
>> >> >
>> >> >
>> >> >
>> >> >
>> >> >
>> >> >
>> >> > Date: Thu, 26 Feb 2009 10:05:46 +0000
>> >> > From: michaelwr...@yahoo.co.uk
>> >> > To: opensim-dev@lists.berlios.de
>> >> > Subject: Re: [Opensim-dev] Comms Manager
>> >> >
>> >> >
>> >> >
>> >> >
>> >> > PS. One issue that I don't like about a lot of the Region to UGAIM code 
>> >> > that is currently in some of the region modules, is how the 
>> >> > network/transport code is mixed up with the handling of some basic 
>> >> > features like friends, presences etc. I do think we should have 
>> >> > separate transport modules.
>> >> >
>> >> > So maybe a IPresenceTransportService, then we could have 
>> >> > PresenceOGS1Module that implements that. And the PresenceModule uses 
>> >> > that interface for talking to and from the UGAIM servers. Rather than 
>> >> > network code being mixed in with logic code in a single module.
>> >> >
>> >> > Now if these are region modules or Global/comms modules is a different 
>> >> > question. I just think we should have more specialisation in the 
>> >> > modules so we can easily change the network protocols without replacing 
>> >> > the whole sub system of a feature.
>> >> >
>> >> > --- On Thu, 26/2/09, MW <michaelwr...@yahoo.co.uk> wrote:
>> >> > From: MW <michaelwr...@yahoo.co.uk>
>> >> > Subject: Re: [Opensim-dev] Comms Manager
>> >> > To: opensim-dev@lists.berlios.de
>> >> > Date: Thursday, 26 February, 2009, 9:44 AM
>> >> >
>> >> >
>> >> >
>> >> >
>> >> >
>> >> > Well I agree the name CommsManager is a bad choice and I'm all for 
>> >> > changing/getting rid of that. I don't see this as a Manager but just 
>> >> > another registery of modules. My proposal certainly isn't about 
>> >> > making/keeping all the comms code centralised. I totally agree that we 
>> >> > should have modules, and break up the current classes/interfaces in the 
>> >> > Comms Manager.
>> >> >
>> >> > The main differences between my proposal for comms modules and region 
>> >> > modules are comms modules are initialised before regions/scenes are 
>> >> > created and have no direct references to the scenes (although of course 
>> >> > scene/region modules could register to events on them etc). But even 
>> >> > that no direct reference could be changed.
>> >> >
>> >> > Also having this separate module system would also allow it to use the 
>> >> > modules from the Grid,User and messaging servers (and maybe later the 
>> >> > inventory/asset servers), which I think could help a lot to cut down 
>> >> > the duplications we have between standalone and grid servers.
>> >> >
>> >> > But my main issue with this concept (the comms modules and registery) 
>> >> > is there isn't really that much difference between these and region 
>> >> > modules. So is there any point in having the two systems/registeries. 
>> >> > My concept is basically a Shared module and registery but more at the 
>> >> > application level rather than the region level.
>> >> >
>> >> > I'm not actually really against having all the comms in region modules. 
>> >> > But do think it brings up some issues. I don't actually agree that app 
>> >> > level code/plugins shouldn't be able to access the comms to the UGAIM 
>> >> > servers without going through regions or duplicating the comms handling 
>> >> > code. And I know some of the other devs have even more issues with all 
>> >> > the comms code being in region modules. So we need to find a solution 
>> >> > that we are all happy with.
>> >> >
>> >> > Maybe the solution is to work on separating the shared region modules 
>> >> > out, so they are a actual different class/interface to the normal 
>> >> > region modules and maybe a different registery(?). As has been talked 
>> >> > about in irc a lot recently. But I guess these would still be accessed 
>> >> > through regions/scenes? So really no different from a usage point of 
>> >> > view to what we have now.
>> >> >
>> >> >
>> >> > --- On Thu, 26/2/09, Melanie <mela...@t-data.com> wrote:
>> >> > From: Melanie <mela...@t-data.com>
>> >> > Subject: Re: [Opensim-dev] Comms Manager
>> >> > To: michaelwr...@yahoo.co.uk, opensim-dev@lists.berlios.de
>> >> > Date: Thursday, 26 February, 2009, 4:33 AMHi,
>> >> >
>> >> >
>> >> >
>> >> > I'm against a CommsManager class, on the grounds I'm against most
>> >> >
>> >> > other *Manager classes.
>> >> >
>> >> > They serve as holders for stuff that seems straightforward
>> >> >
>> >> > initially, but soon become monolithic molochs that make a simple
>> >> >
>> >> > change, like adding a
>> >> >
>> >> > single method on a single interface, a task of
>> >> >
>> >> > changing 37 files.
>> >> >
>> >> >
>> >> >
>> >> > I don't think that any of the region comms currently in region
>> >> >
>> >> > modules will need to be accessed from application plugins, since
>> >> >
>> >> > they are region specific.
>> >> >
>> >> >
>> >> >
>> >> > I would envision a system of application plugins similar to region
>> >> >
>> >> > plugins, that would expose their own comms interfaces to do the sort
>> >> >
>> >> > of comms the application, rather than a region, needs to do.
>> >> >
>> >> >
>> >> >
>> >> > Forcing region comms to go through some CommsManager seems wrong.
>> >> >
>> >> >
>> >> >
>> >> > Here, I see that specialization is about to be discarded for
>> >> >
>> >> > convenience, and I don't agree. Region comms, like teleport comms,
>> >> >
>> >> > don't belong in an application level comms broker, they belong in
>> >> >
>> >> > region modules. So do most other comms I'm aware of. Take users, fir
>> >> >
>> >> > instance. The application never talks about users, regions do. The
>> >> >
>> >> > user server comms really should be a shared region module.
>> >> >
>> >> > Modularisation is the
>> >> >
>> >> > key here, not centralisation.
>> >> >
>> >> >
>> >> >
>> >> > Melanie
>> >> >
>> >> >
>> >> >
>> >> >
>> >> >
>> >> > MW wrote:
>> >> >
>> >> >> 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
>> >> >
>> >> > _______________________________________________
>> >> >
>> >> > Opensim-dev mailing list
>> >> >
>> >> > Opensim-dev@lists.berlios.de
>> >> >
>> >> > https://lists.berlios.de/mailman/listinfo/opensim-dev
>> >> > _______________________________________________
>> >> >
>> >> > Opensim-dev mailing list
>> >> >
>> >> > Opensim-dev@lists.berlios.de
>> >> >
>> >> > https://lists.berlios.de/mailman/listinfo/opensim-dev
>> >> >
>> >> >
>> >> >
>> >> > ------------------------------------------------------------------------
>> >> >
>> >> > _______________________________________________
>> >> > Opensim-dev mailing list
>> >> > Opensim-dev@lists.berlios.de
>> >> > https://lists.berlios.de/mailman/listinfo/opensim-dev
>> >>
>> >> _______________________________________________
>> >> Opensim-dev mailing list
>> >> Opensim-dev@lists.berlios.de
>> >> https://lists.berlios.de/mailman/listinfo/opensim-dev
>> > 
>> > 
>> > 
>> > ------------------------------------------------------------------------
>> > 
>> > _______________________________________________
>> > Opensim-dev mailing list
>> > Opensim-dev@lists.berlios.de
>> > https://lists.berlios.de/mailman/listinfo/opensim-dev
>> _______________________________________________
>> Opensim-dev mailing list
>> Opensim-dev@lists.berlios.de
>> https://lists.berlios.de/mailman/listinfo/opensim-dev
> _______________________________________________
> Opensim-dev mailing list
> Opensim-dev@lists.berlios.de
> https://lists.berlios.de/mailman/listinfo/opensim-dev
> 
> 
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Opensim-dev mailing list
> Opensim-dev@lists.berlios.de
> https://lists.berlios.de/mailman/listinfo/opensim-dev
_______________________________________________
Opensim-dev mailing list
Opensim-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/opensim-dev

Reply via email to