On Thu, Jun 6, 2013 at 12:37 AM, David Hagan <[email protected]> wrote:
> Hi Bernd, > > I agree with you about the XMPP principles there. In essence, I've been > using the first option you've listed (I'm using MUC, and I'm embedding my > own payloads), and in the past I've been connecting some of these clients > directly to a central xmpp server, but now I'm decentralizing and > federating the service with another service that has common tasks. So, I'm > trying to leave my clients (who were essentially written to use MUC with > custom payloads) unchanged, but I'm hoping to modify my MUC server slightly > so that it shares some of its state in a very particular way with the other > service I'm federating with, and accepts state from that service. For a project I did I also used MUC. For every room, upon creation, I added a special system occupant (with a matching client session on the target server), which relayed all messages in all rooms to the target service. This way, I didn't need to replace the standard MUC behavior. > I was > hoping to perform all the state synchronization in-memory, within the JVM, > and it seems vysper might be a perfect fit to do that. So, I've written > custom handlers to do that, and I've written a custom module to load those > handlers, so it sounds like we're both thinking about this the same way. > My custom module extends the default MUC module - I just wanted to ensure > that I wasn't running both my module and the default MUC module at the same > time, because that might cause some oddities. > > Given that I'm running > this from within my other project, by invoking: > > new XMPPServer(domain); > > and then adding my endpoints, storage-providers, tls-configuration, users, > and any modules I'm using, do I still need to manipulate spring-config.xml? > No, by invokong new XMPPServer, you are building your own ServerMain, and can add or leave out all the modules you want. > Essentially, can I simply choose not to load the default MUC module there, > and load my own custom module (which extends the default MUC module) in its > place? > Yep. > > Thanks again Bernd. You've been very helpful. > > > On 6 June 2013 06:35, Bernd Fondermann <[email protected]> wrote: > > > Hi David, > > > > first of all Vysper is a XMPP server. XMPP specifies the basic stuff like > > syntax, stanzas, routing, security etc. foremost to provide chat > > functionality (roster, presence, communication), see > > http://xmpp.org/xmpp-protocols/rfcs/ . > > Then, there is Multi-User-Chat, which already is an optional extension to > > the basic XMPProtocol. You could leave out MUC and still provide chat, > this > > is true for any XMPP server. There are many other extension, see > > http://xmpp.org/xmpp-protocols/xmpp-extensions/ ) > > > > Extensions reuse the basic stanza syntax, but are differentiated using > > namespaces ("xmlns" xml attributes). For MUC, these namespaces start > with " > > http://jabber.org/protocol/muc". > > > > There are three basic approaches how to implement your own business > logic: > > a. use an existing XMPP core protocol or extension, and embed your own > > payload within the inner elements of the stanzas. these elements would be > > identified by your own namespace. > > example: extension 85 (http://xmpp.org/extensions/xep-0085.html) extends > > the core XMPP chat features to indicate whether a user is typing or not. > > b. specifiy your own extension protocol using your own namespace (that's > > what MUC or PubSub or Jabber-RPC do). > > c. find an XEP which already suits your needs :-) > > > > If you want to build your own module from the ground, have a look at > those > > in > > org.apache.vysper.xmpp.modules.extension > > > > more inline... > > > > On Wed, Jun 5, 2013 at 3:52 PM, David Hagan <[email protected]> > wrote: > > > > > Hi Bernd, > > > > > > Thanks for explaining that. I'm getting a much clearer understanding > of > > > how I could use vysper in my application, and if you don't mind > > answering a > > > follow-up question, I think I'll have a clear understanding of how to > do > > > what I'm aiming to do. First though, allow me to answer your question: > > > > > > I have an application which performs various actions, some of which are > > > analogous to the XMPP MUC featureset. It already has internal routing > > for > > > that purpose, as provided by custom code. What I was hoping to do was > > > attach an embedded vysper server, so that other xmpp clients could > > interact > > > with my application. In essence, I've written a replacement MUC > module, > > > which in addition to normal MUC functions also passes messages to my > > > application, and which provides internal endpoints for my application > to > > > pass messages back. Lastly, the replacement MUC module does not store > > > history or provide history to new members of the MUC room, because > that's > > > handled elsewhere in my application. > > > > > > > You should either conform with the MUC extension specification, or use > your > > own namespace as described above. > > > > > > > Essentially, I'm hoping to use vysper to provide endpoints to my > existing > > > application which xmpp clients (not normal xmpp chat clients of course, > > but > > > custom clients that happen to be using xmpp libraries like smack) can > > > connect to, and I was hoping to wire those connections to my > application > > by > > > means of a set of MUC Handlers. > > > > > > Good idea, and this will probably work, but consider building your own > > module or extending MUC (instead of altering it). > > Again, can you give a hint what kind of stuff you are building? > > > > > > > To be precise - I have a custom > > > MUCMessageHandler and a custom MUCPresenceHandler. Is it possible for > me > > > to replace the default MUC Module's handlers with my custom handlers? > If > > > not, I also have a custom MUC module, which has those handlers already > > > attached. Can I register my custom MUC module to the default MUC > > Module's > > > subdomain, so that it also listens to the MUC messages? > > > > > > > Yes, you can alter or append to the list of handlers, see > > MUCModule.initialize() but this requires deep understanding of Vysper, > XMPP > > and MUC. > > > > > > > You mentioned that I would have to disable the default MUC module. Is > > > there a simple way of disabling the MUC module? Is it enabled by > default > > > on the embedded XMPPServer that I deploy via the maven module > > > "vysper-core", or can I simply choose to add my MUC module instead of > it? > > > I've seen that XMPPServer has a method "addModule", but I didn't see > in > > > the API any mention of removing modules at runtime. > > > > > > > The configuration file spring-config.xml configures all active modules. > > > > Bernd > > > > > > > Thanks Bernd > > > > > > > > > > > > On 5 June 2013 22:13, Bernd Fondermann <[email protected]> > > wrote: > > > > > > > Hi David, > > > > > > > > On Wed, Jun 5, 2013 at 1:28 AM, David Hagan <[email protected]> > > > wrote: > > > > > > > > > How do I correctly overwrite the MUC behaviour? Essentially, I'm > > > adding > > > > a > > > > > custom module to my embedded vysper server in my project, using: > > > > > > > > > > XMPPServer.addModule > > > > > > > > > > However, my custom module is a modified MUC (XEP_0045) behaviour > > > module. > > > > > Do I need to disable the default MUC handling module? > > > > > > > > > > > > yes. > > > > > > > > > > > > > My Module has the > > > > > same name (as returned by getName) and the same version (as > returned > > by > > > > > getVersion) as the matching default MUC extension for the version > of > > > > vysper > > > > > that I'm running. > > > > > > > > > > > > > ok, what does it do beyond what the built-in MUC does? > > > > Some of it's functionality can be replaced (and more should be > > depending > > > on > > > > user needs), especially when you consider persistence etc. > > > > > > > > In general, MUC is a XMPP standard, and altering it's behavior in a > > > > non-conformant way can lead to problems. > > > > However, we are of course interested in incorporating improvements > and > > > > bugfixes into the Vysper codebase. > > > > > > > > > > > > > Essentially, I'm asking two questions: > > > > > > > > > > Will my custom module be involved in MUC messages, given that the > > > default > > > > > module is presumably still in place? > > > > > > > > > > > > > No. The MUC module is also a 'component', running on it's own logical > > > > subdomain and receiving all stanzas targeted to this domain. > > > > In general this statement is not true for module, where a module > > > registers > > > > additional 'handlers' which receive all stanzas targeted to a > specific > > > XMPP > > > > namespace. > > > > > > > > > > > > > Will the default module be involved in MUC messages, given that my > > > module > > > > > has the same name and version? > > > > > > > > > > > > > Name and version should have no impact here. You can have two MUC > > modules > > > > side by side when you configure them under different subdomains. > > > > > > > > Bernd > > > > > > > > > > > > > > > > -- > > > David Hagan > > > > > > ([email protected]) > > > > > > > > > -- > David Hagan > > ([email protected]) >
