Showing posts with label .Net Windows. Show all posts
Showing posts with label .Net Windows. Show all posts

Wednesday, January 25, 2012

Working with XMPP in .Net using agsXMPP SDK

XMPP

The Extensible Messaging and Presence Protocol (XMPP) is an open technology for real-time communication, which powers a wide range of applications including instant messaging, presence, multi-party chat, voice and video calls, collaboration, lightweight middleware, content syndication, and generalized routing of XML data.

How to work with XMPP in .Net?

agsXMPP is a SDK / library for the eXtensibleMessaging and Presence Protocol (XMPP) protocol written in managed C# dedicated to .NET and Mono technologies. The SDK is released as open source.

SDK could be used for XMPP client, server and component development.

SDK Download Path: http://www.ag-software.de/download-directory/

Here is a small sample how easy you can login to a XMPP Server.

a) I tried Connecting to my Gtalk Account through Jabber Server and tried Changing the Status Message Dynamically(Eg:Showing a CountDown for NewYear).

b) Sending auto reply to contacts in Gtalk while away.

3) Showing Current cricket live Score in your status message.

objXmpp = new agsXMPP.XmppClientConnection();

agsXMPP.Jid jid = null;

jid = new agsXMPP.Jid("my gmail id");

objXmpp.Password = "my gmail password";

objXmpp.Username = jid.User;

objXmpp.Server = jid.Server;

objXmpp.AutoResolveConnectServer = true;

objXmpp.Status = "Available J";

try

{

objXmpp.OnMessage += messageReceived;

objXmpp.OnAuthError += loginFailed;

objXmpp.OnLogin += loggedIn;

objXmpp.Open();

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

private void loggedIn(object sender)//On Successful Login to your Account

{

MessageBox.Show("Logged In");

MessageBox.Show(objXmpp.Authenticated.ToString());

}

private void loginFailed(object o, agsXMPP.Xml.Dom.Element el)//On Login Failure

{

MessageBox.Show("Loggin Failed");

}

private void messageReceived(object sender, agsXMPP.protocol.client.Messagemsg)//Handling Auto Reply on Message received

{

string[] chatMessage = null;

chatMessage = msg.From.ToString().Split('/');

agsXMPP.Jid jid = null;

jid = new agsXMPP.Jid(chatMessage[0]);

agsXMPP.protocol.client.Message autoReply = null;

autoReply = new agsXMPP.protocol.client.Message(jid, agsXMPP.protocol.client.MessageType.chat, "This is Auto reply");

objXmpp.Send(autoReply);

}

private void StatusTimer_Tick(object sender, EventArgs e)//To Show a Countdown

{

TimeSpan span = TargetDate.Subtract (System .DateTime ..Now );

string status = "Days More for My Bday:DD" + span.Days.ToString() +"hh" + span.Hours.ToString() + "mm:" + span.Minutes.ToString() + "ss:" + span.Seconds ..ToString();

Presence p = new Presence(ShowType.chat, status);

p.Type = PresenceType.available;

objXmpp.Send(p);

}

//To Get Live Cricket Score from a RSS Feed

private void GetLiveCricketScore()

{

try

{

// create here table and columns that will be used

// for storing items from the xml file for later binding into grid

DataTable dtable = new DataTable();

dtable.Columns.Add(new DataColumn("SlNo"));

dtable.Columns.Add(new DataColumn("title"));

dtable.Columns.Add(new DataColumn("link"));

// fetch webrequest. Here, give the path of the location where rss feed is stored.

//WebRequest WebReq = WebRequest.Create("http://static.cricinfo.com/rss/livescores.xml");

WebRequest WebReq =WebRequest.Create(" http://static.cricinfo.com/rss/livescores.xml ");

// get webresponse from the webrequset

WebResponse webRes = WebReq.GetResponse();

// use stream to stremline the input from from webresponse.

Stream rssStream = webRes.GetResponseStream();

// Create new xml document and load a XML Document

// with the strem.

XmlDocument xmlDoc = new XmlDocument();

// loads the url from the stream

xmlDoc.Load(rssStream);

// use XmlNodeList to get the matching xmlnodes from the xmldocument

XmlNodeList xmlNodeList = xmlDoc.SelectNodes("rss/channel/item");

// create array of the object for creating the row

object[] RowValues = {"", "", "" };

// Make a Loop through RSS Feed items

for (int i = 0; i < xmlNodeList.Count; i++)

{

XmlNode xmlNode;

RowValues[0] = i;

xmlNode = xmlNodeList.Item(i).SelectSingleNode("title");

if (xmlNode != null)

{

RowValues[1] = RemoveDigitsAndSpecialCharacters(xmlNode.InnerText);

}

else

{

RowValues[1] = "";

}

xmlNode = xmlNodeList.Item(i).SelectSingleNode("link");

if (xmlNode != null)

{

RowValues[2] = RemoveDigitsAndSpecialCharacters(xmlNode.InnerText);

}

else

{

RowValues[2] = "";

}

// creating datarow and add it to the datatable

DataRow dRow;

dRow = dtable.Rows.Add(RowValues);

dtable.AcceptChanges();

}

cmbCurrentMatches.DataSource = dtable;

cmbCurrentMatches.DisplayMember = "title";

}

catch (WebException)

{

MessageBox.Show("Not Able to Access Cricket Live Feeds");

}

catch (XmlException)

{

MessageBox.Show("The received Feed was not in a proper format");

}

}

 
Twitter Bird Gadget