domingo, 7 de marzo de 2010

Jugando con XMPP(jabber) en .Net


El protocolo XMPP conocido anteriormente como Jabber, es un protocolo libre basado en XML, su objetivo es la mensajería instantánea. Existen disimiles clientes de mensajería que soportan este protocolo, ejemplos de esto son Gtalk, Pandion ,
Entre otro gran grupo del cual pueden encontrar una lista más completa en jabber.org.
Bueno entremos en el tema principal de este pos que es dar a conocer la librería agsXMPP la cual nos facilita el uso de este protocolo.
Configurado la conexión al servidor Jabber.

XmppClientConnection conection = new XmppClientConnection();
conection.Port = 5222;
conection.UseSSL = false; // or true
conection.Server = "jabber.org";
conection.Username = "my_user";
conection.Password = "my_password";
conection.Status = "hello";

Ahora implementaremos el evento para saber cuándo se establezca la conexión.

conection.OnLogin += new ObjectHandler(conection_OnLogin);

Definimos el método conection_OnLogin, en el cual mostrareos un mesnjae por consola: On line.

static void conection_OnLogin(object sender)
{
Console.WriteLine("On line.");
}

Ahora implementamos el evento para mostrar los mensajes que recivimos.

conection.OnMessage += new agsXMPP.protocol.client.MessageHandler(conection_OnMessage);

static void conection_OnMessage(object sender, agsXMPP.protocol.client.Message msg)
{
if (msg.Type == MessageType.chat)
{
Console.WriteLine(msg.From.User + ": " + msg.Body);
}
}

Y por ultimo abrimos la conexión.

conection.Open();

Para enviar un mensjae al contacto que queramos solo hacemos lo siguiente.

Message newMsg = new Message(new Jid ("user@jabber.org"), "hello user");
conection.Send(newMsg);

Aqui les va el ejemplo completo.

using System;
using agsXMPP;
using agsXMPP.protocol.client;

namespace JabberTest
{
class Program
{
static XmppClientConnection conection;
static void Main(string[] args)
{
conection = new XmppClientConnection();
conection.Port = 5222;
conection.UseSSL = false; // or true
conection.Server = "jabber.org";
conection.Username = "my_user";
conection.Password = "my_password";
conection.Status = "hello";

conection.OnLogin += new ObjectHandler(conection_OnLogin);
conection.OnMessage += new agsXMPP.protocol.client.MessageHandler(conection_OnMessage);

conection.Open();
}

static void conection_OnMessage(object sender, agsXMPP.protocol.client.Message msg)
{
if (msg.Type == MessageType.chat)
{
Console.WriteLine(msg.From.User + ": " + msg.Body);

Message newMsg = new Message(msg.From, "hello user");
conection.Send(newMsg);
}
}

static void conection_OnLogin(object sender)
{
Console.WriteLine("On line.");
}
}
}

5 comentarios:

  1. Muchachito
    bueno el trabajo que vas haciendo, en el sitio Blogotepeque http://www.blogotepeque.com hay una comunidad grande y variada, hay un grupo de colegas que les gusta estos temas de tecnologias e inventos. Date a conocer en este sitio.

    Exitos y pa´lante

    ResponderEliminar
  2. Gracias hermano, ya les pase un email. Felicidades por tu trabajo en la blogofera también.

    ResponderEliminar
  3. Que buen artículo maestro, de casualidad encontre tu blog buscando sobre jabber y vaya bastante bien explicado con un ejemplo muy bien aplicado. Saludos y muchos éxitos

    ResponderEliminar
  4. hola, podrian decirme como enviar una solicitud de amistad con XMPP a traves de una aplicacion en .NET

    ResponderEliminar
  5. Hola, me gustó tu artículo. Pero me ocurre un problema. Estoy en la universidad y quise hacer un chat complementario a un programa que hago. Acá hay un servidor jabber obvio, nosotros nos conectamos por distintos programas, Pidgin, Pandiom, etc. Pero sucede que no me sirve tu código. Cuando me da que está On Line, realmente compruebo con el jabber abierto de otros amigos y resulta que no es así. Aún así intento enviar msg, pero tampoco responde nada. Hice otra versión de tu código pero esta vez para consola. y me da este error: Socket Exception: Error en la operación de descifrado, vea la excepción interna. El hecho es que no sé por dónde diablos es el interno ese para poder ver mejor la excepción. No se si me puedes ayudar, casi no estoy conectado, así que si me lo haces llegar por correo es mucho mejor: jcarballo@estudiantes.uci.cu. Gracias de antemano.

    ResponderEliminar