HardBirch

PC/WM手机的IM客户端设计—–agsXMPP

时间:09-10-26 栏目:安卓入门与提高 作者:张飞不张,文采横飞 评论:9 点击: 4,237 次

     XMPP是一个开源的IM通信协议,客户端与服务器都开源,并且都有主流开发语言的支持。目前有很多基于XMPP的IM,可以到http://www.jabber.org/
注册XMPP的账号和下载IM。这些IM的客户端,可以登录绝大多数基于XMPP通信协议的IM服务器,举个例子:A公司的IM-A通信软件,和B公司的IM-B通信软件都是基于XMPP通信协议,那么IM-A客户端可以登录IM-B的服务器。。。

     agsXMPP是XMPP客户端的C#实现,支持WM手机和PC,agsXMPP的例子代码不难(这里下载:http://www.ag-software.de/download.html
),但是agsXMPP的注释不多,所以比较难理解,本文就解释一下agsXMPP例子中核心的部分:事件处理

       以下代码来自我的当前项目,因此不能全部贴出代码,只贴出代码结构,用于解释常用的事件处理:









































}
else //处理好友上线/离线的事件处理
{
if (pres.From.Bare.Equals(Cls_Config.XmppCon.MyJID.Bare) == false)//如果不是自己的信息,即好友信息
{
//检测该好友是否不存在于好友列表(OnPresence比OnRosterItem优先处理添加好友),则自动添加ListItem
if (Cls_Config.alFriendsList.IndexOf(pres.From.Bare) == -1)
{
//添加到好友列表
}
//判断该好友目前的状态,上线还是离线
if (pres.Type == PresenceType.available)//如果好友上线
{}
else if (pres.Type == PresenceType.unavailable)//如果好友离线
{}
}
}
}
/// <summary>
/// 登陆时触发的事件
/// </summary>
private void XmppCon_OnLogin(object sender)
{
if (ucContactList.InvokeRequired)
{
ucContactList.BeginInvoke(new agsXMPP.ObjectHandler(XmppCon_OnLogin), new object[] { sender });
return;
}
//通知好友,我已经上线了
Presence p = new Presence(ShowType.chat, "Online");
p.Type = PresenceType.available;
Cls_Config.XmppCon.Send(p);
}
/// <summary>
/// 关闭连接时触发的事件
/// </summary>
private void XmppCon_OnClose(object sender)
{
if (ucContactList.InvokeRequired)
{
ucContactList.BeginInvoke(new agsXMPP.ObjectHandler(XmppCon_OnClose), new object[] { sender });
return;
}
//通知好友,我下线啦
Presence p = new Presence(ShowType.chat, "Offline");
p.Type = PresenceType.unavailable;
Cls_Config.XmppCon.Send(p);
}

delegate void OnMessageDelegate(object sender, agsXMPP.protocol.client.Message msg);
/// <summary>
/// 当收到信息的时候,触发的事件
/// </summary>
private void XmppCon_OnMessage(object sender, agsXMPP.protocol.client.Message msg)
{
if (ucContactList.InvokeRequired)
{
ucContactList.BeginInvoke(new OnMessageDelegate(XmppCon_OnMessage), new object[] { sender, msg });
return;
}
if (msg.Type == MessageType.chat)//判断聊天类型
{
//如果还没与该好友对话
//则新建聊天窗口
//已经存在聊天窗口,
//则把内容传到聊天窗口显示
}

}

声明: 本文由( 张飞不张,文采横飞 )原创编译,转载请保留链接: PC/WM手机的IM客户端设计—–agsXMPP

PC/WM手机的IM客户端设计—–agsXMPP:目前有9 条留言

  1. 9楼
    IT_Peak:

    [e02]

    2010-01-16 23:02 [回复]
  2. 8楼
    IT_Peak:

    [e01]

    2010-01-16 23:02 [回复]
  3. 7楼
    IT_Peak:

    as

    2010-01-16 23:07 [回复]
  4. [e01]能再详细一点吗?比如说,用户在线状态等!!像隐身或离开或在线上等状态!

    2010-01-19 21:18 [回复]
  5. 5楼
    hellogv:

    用户在线状态都在XmppCon_OnPresence这个函数里做处理,你仔细看看。。。

    2010-01-19 21:56 [回复]
  6. [e01]是这样的,我现在做了个可以看到好友在线显示彩色头像,但在XmppCon_OnPresence事件中难捕获到ShowType.xa等状态,比如说像QQ的,在线,隐身,一会回来,忙碌等状态!诚心求教!

    2010-01-22 22:44 [回复]
  7. android模拟器可以连接互联网吗,怎么连接啊,我没有android的手机,请你教教我把

    2011-03-24 18:48 [回复]
  8. 沙发
    yeahwell:

    [reply]gaofeng2009123[/reply]
    直接用Googl浏览器搜索,可以自己拓展模拟器内存,然后下载别人开发好的Android应用程序使用

    2012-01-25 13:40 [回复]

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐