Velocity C# XMPP Library

At Beyond Velocity we rely on XMPP for push notifications in many of our applications. XMPP is a messaging standard that uses extensible XML stanzas to communicate over a TCP/IP connection.

There are a number of solid, secure, high performance, open-source XMPP servers available, such as OpenFire and EJabberd. To communicate with a server, you need a client/component XMPP library for the language you are using. There are many available, both commercial and free.

As a pet project, I’ve recently begun work on a C# library for XMPP client and component development. The goal is to make it extremely easy to call services implemented in components, and to hide the XMPP details from the developer.

For example, a service will look like this:

using Velocity.Component;

namespace Velocity.Services
{
    [Service("echo")]
    public class EchoService
    {
        public string Echo(string text)
        {
            return text;
        }
    }
}

 
A generator will create the client side API, providing a web-service like proxy.

Each IQ stanza is required to return a result, so being an asynchronous messaging system, there’s some work to be done on the architecture/design front.

Right now the goal is to implement the XMPP essentials and the communication plumbing. It’s early days, but I’m off and running. The project is hosted on Github here.

imjava.jpg
To learn more about XMPP the best place to start would be the official site. The guys from ProcessOne have some excellent videos up on YouTube here, they specialize in EJabberd, Erlang and recently Elixir. There are a number of books available, my personal favorite (although a bit dated) is Instant Messaging in Java.

 

And for a deeper dive, here is the first video from ProcessOne’s Xmpp Academy series:

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s