65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Jabber.Net 的 Google Chat 桌面应用程序

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.83/5 (36投票s)

2009年3月19日

公共领域

1分钟阅读

viewsIcon

291841

downloadIcon

19067

一个简单的 Google Chat (gtalk) 应用程序,使用 Jabber.Net。

Gtalk_Messenger.jpg

引言

这是一个用 C# 开发的简单的 Google Chat (gtalk) 桌面应用程序。使用此应用程序,我们可以轻松地与 Gmail 联系人聊天。此应用程序是开发者开始使用 Gmail 聊天应用程序的最佳方法。

背景

此应用程序使用 .NET 开源库 Jabber.net 开发。该库包含一组用于发送和接收可扩展消息和状态协议 (XMPP) 的 .NET 控件,也称为 Jabber。

Using the Code

安装 Jabber.Net 库后,您可以在 Visual Studio 工具箱中看到 Jabber.Net 控件列表。现在,将 JabberClient 控件添加到窗体,并分配用户名和密码。

User = txtUserName.Text;
Pwd = txtPassword.Text;
jabberClient1.User = User;
jabberClient1.Server = "gmail.com";
jabberClient1.Password = Pwd;
jabberClient1.AutoRoster = true;

现在,添加一个 RosterTree 控件来填充联系人列表,并将 roster 管理器和状态管理器的实例分配给 roster 树控件。

rm = new RosterManager();
rm.Stream = jabberClient1;
rm.AutoSubscribe = true;
rm.AutoAllow = jabber.client.AutoSubscriptionHanding.AllowAll;
rm.OnRosterBegin += new bedrock.ObjectHandler(rm_OnRosterBegin);
rm.OnRosterEnd += new bedrock.ObjectHandler(rm_OnRosterEnd);
rm.OnRosterItem += new RosterItemHandler(rm_OnRosterItem);

RosterManager 会将联系人列表添加到 roster 树,而 PresenceManager 会为联系人添加通知,以指示联系人是处于在线还是离线状态。

pm = new PresenceManager();
pm.Stream = jabberClient1;

rosterTree1.RosterManager = rm;
rosterTree1.PresenceManager = pm;

分配完以上所有内容后,我们需要调用 connect() 方法来使用给定的凭据登录,并使用联系人列表填充 roster 树。

jabberClient1.Connect();
jabberClient1.OnAuthenticate += new bedrock.ObjectHandler(jabberClient1_OnAuthenticate);

双击联系人列表中的联系人将打开一个聊天窗口,用户可以通过以下函数发送消息

Gtalk_chat.jpg

private void SendMessage()
{
	jabber.protocol.client.Message reply = 
		new jabber.protocol.client.Message(_jabberClient.Document);
    if (rtbSendMessage.Text != "\n" && rtbSendMessage.Text != " ")
    {
        reply.Body = rtbSendMessage.Text;
        if (reply.Body != "")
        {
            reply.To = _mailId;
            _jabberClient.Write(reply);
            string sentMsg = _jabberClient.User + " Says : " + 
					rtbSendMessage.Text + "\n";
            AppendConversation(sentMsg);
            rtbSendMessage.Text = "";
        }
    }            
}

JabberClient 已注册一个 onMessage 事件,以在收到传入消息时接收。这由以下函数处理

public void _jabberClient_OnMessage
	(object sender, jabber.protocol.client.Message msg)
{
   if (!this.ReceiveFlag)
   {
       if (msg.From.Bare == this.MailId)
       {
           if (msg.Body != "")
           {
               string receivedMsg = msg.From.User + " Says : " + msg.Body + "\n";
               AppendConversation(receivedMsg);
               msg.Body = "";
           }
       }
   }
}

历史

  • 发布于 2009 年 3 月
© . All rights reserved.