Hi Everybody,
as promised here it is a more detailed mail about the work I did on XWiki chat.
First of all I committed the code of the current prototype here:
https://github.com/xwiki-contrib/xwiki-platform-chat
Now some technical details:
1) The system uses an embedded Vysper XMPP server
(
http://mina.apache.org/vysper/) with the Multi User Chat extension.
2) The communication is done using the BOSH protocol
(
http://en.wikipedia.org/wiki/BOSH). The BOSH endpoint is in the
application context path, which means that the BOSH servlet will
receive all the cookies as the other servlets (important for
authentication, see after)
3) The whole UI of the chat system is contained in the
XWiki.XWikiChatSkin. I've setup some tricky XSL transformations for
bundling all the needed resources into this skin (see
https://github.com/xwiki-contrib/xwiki-platform-chat/blob/master/xwiki-plat…)
The result is that all javascript files, VM overrides, and CSS files
are added to the skin as properties.
4) The Javascript, VM overrides and templates are available as
separate file in
https://github.com/xwiki-contrib/xwiki-platform-chat/tree/master/xwiki-plat….
In order to hack it I use
https://github.com/xwiki/xwiki-debug-eclipse
and make symbolic links through the Eclipse interface so that those
resources are available as if they were on the file system.
5) The current authentication is dummy (see
https://github.com/xwiki-contrib/xwiki-platform-chat/blob/master/xwiki-plat…)
What is needed to do is to process the data coming from the cookies
and use the XWiki authentication subsystem to check the credentials
coming at the beginning of an XMPP session. This could be quite tricky
and will need some work for modifying the BoshServlet in order to make
these credentials available to the code that will need them.
6) When the page is loaded a connection is established and several
chat rooms are automatically joined: wiki, space and page. This of
course is temporary. The idea is that on page load the user will joing
the chatroom for the current wiki, the current space and the current
page, depending on what she is looking at. This means that there will
potentially be a chat room for every page in the wiki, for every space
and, in a multi-wiki environment, for every wiki. The number of users
in these chatroom will depend on what the users are actually working
on.
7) Chatrooms are left on page unload. This means that looking at the
chatrooms population we might be able to understand how many users are
currently connected and where.
8) Since XWiki has a feature for defining a social network (i.e.,
following/followers) this data can be used to show in the chat the
users that I am following that are online, so that I might be able to
send them private messages.
9) Currently no the XMPP server is not backed by any storage, but it
is possible to write a storage system that stores all the discussions
in some wiki object (e.g., a page) so that a trace is kept.
10) The XMPP server also supports a Publish/Subscribe module. This
could be used to implement a live notification system. But even
without using pubsub, a special chatroom can be used to send these
messages that will be displayed, for example, using a special UI à la
growl (
http://growl.info/screenshots) or equivalent.
There is currently a limitation with the Vysper BOSH servlet... It
seems that it doesn't like too much Tomcat which can be a problem. The
thread where the problem is explained is here:
http://mail-archives.apache.org/mod_mbox/tomcat-users/201201.mbox/%3C4F1031…
I haven't yet investigated the problem, but a possible solution (or a
roadmap towards a solution) should be found as soon as possible
because if we start to integrate the authorization system and the
storage system, it would be difficult to port it to another system [1]
I think that's all for the moment.
Of course comments are welcome.
-Fabio
[1] I've looked at other XMPP servers, but I chose Vysper because it
is part of a well established Apache project, it's very simple to use,
supports all that we need (embeddable server, multi user chat, etc.)
and has a quite active community. Other solutions were either GPLv3,
or not showing a clear situation wrt the community and the features.
On Sat, Mar 31, 2012 at 1:46 AM, Fabio Mancinelli
<fabio.mancinelli(a)xwiki.com> wrote:
Hi everybody,
one of the research projects we are involved in is about realtime
collaboration. One of the aspects we wanted to investigate was the
integration of a chat system within XWiki.
I've been working on this lately and I've built a prototype that uses
an embedded XMPP server for handling all the communication.
I still have to cleanup a bit the code before committing it, but I
took a video of how things work.
You can find it here:
http://youtu.be/0Gwtpu3iVwo (it's FullHD, so
make sure to change the video quality and to switch to fullscreen)
There are several things we need to address (authentication is one of
them), but I think we could have a functional extension pretty soon.
It's 1:30am right now, so I will give you more details in a next mail :)
Enjoy.
Thanks,
Fabio