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 #yiv372014547 .hmmessage P { margin:0px;padding:0px;} #yiv372014547 { font-size:10pt;font-family:Verdana;} 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