View Full Version : NEW ActionScript 3 XIFF Version - for Flex Builder 2 projects with XMPP

09-02-2006, 03:12 AM
Spice up your Flex Builder 2 projects with XMPP, using an newly ported ActionScript 3 version of XIFF

–>If you would like to skip to the Flex demo of the messenger just go here.

A few months ago I started working on a complex RIA that required an instant messenger type component. We decided to use Flex Builder 2 and ActionScript 3 to developer the application. I quickly realized that with ActionScript 3 being so new (in terms of official release) that there was no real standardized way to add the component. So I started exploring different options, weighing the benefits and drawbacks of various technologies. Licensing cost, scalability, reusability, maintenance and standardization were among the main criteria I used to come to an effective solution.

Where I landed was a bit of a hybrid. I decided to utilize Jabber for the textual component of the software.

"Jabber is best known as "the Linux of instant messaging" — an open, secure, ad-free alternative to consumer IM services like AIM, ICQ, MSN, and Yahoo…" from Jabber

Combine this with Flash Media Server for the video chat and you have a solid messaging platform. (FMS integration is out of the scope of this blog but I am sure I will be documenting my experience with it at a later date.)

In order to satisfy the business needs of this project I needed to combine

-the built in Flash XML socket functionality;

-a standardized xml specification called xmpp (Jabber);

-an open source server that supports this specification (Wildfire server in
my case);

-and an open source xmpp api called XIFF.

The only rub, XIFF was currently in beta and written in ActionScript 2.

XIFF is a Flash API for instant messaging and presence using the XMPP protocol. The main developer, Sean Voisen had a solid, object oriented library from which to start an AS3 port.

I decided it made more sense to take an existing well written library and port it than start from scratch. Given that this library is protected by a limited GNU license it also meant I would be giving something back to the Flash community, which, has been an immeasurable asset to me over the years.

I teamed up with a super talented developer, Derrick Grigg and got to work. Let me tell you, converting a large library of AS2 code to AS3 is no small task. The rules for AS3 have definitely changed. All the methods that pulled null results and thus silently failed are silent no more! You’ll quickly see the reason for “try…catch…finally” as there is nothing silent about a failure in AS3. The support for runtime errors is huge and ultimately makes a library like this much more stable. The prototype decoration that solved for multiple inheritance issues… not supported (I say that, knowing full well there is a way to do it… it's just not pretty). AS3 loves using the inheritance chain the way it was intended.

So now that the new AS3 library is (almost) available, here are some summary stats..


XIFF includes an extension architecture that makes it easy to add functionality for additional protocol extensions, or even your own special-needs extensions. There are quite a few extensions already included in the library, giving it support for the following functionality:

• XML-RPC over XMPP (JEP-0009)

• Multi-user conferencing (JEP-0045)

• Service browsing (JEP-0030)

• XHTML message support (JEP-0071)


The following are servers that are known to work with XIFF and Flash:

• Wildfire (http://www.jivesoftware.org/wildfire)
• Jive Messenger (http://www.jivesoftware.org)
• Antepo OPN Server (http://www.antepo.com)
• OpenIM 1.2.1 (http://www.open-im.net/en/)
• JabberD 1.4.3 (http://www.jabber.org)
• Jabber, Inc. XCP (http://www.jabber.com)

With the feature and compatibility set, here are some common uses and ideas.

Possible uses:

• Adding instant messaging to your projects. This includes nifty features like presence information, multi-user conferencing support, XHTML message support, Flex data enabled roster handling and so on.

• Live communication of any kind, including live tech support, admin communication, and anything that requires a live response from an admin side.

•Creative advertising… use your imagination.

• The general ability to be able to “push” content to your visitor, rather than depending on them to “request” it.

This library is currently in alpha. As soon as there has been a bit more testing we will move it to beta and release the source. Check out a Flex demo of the messenger here.