agsXMPP越来越多人用,最近有几个网友都问起如何在agsXMPP的客户端处理好友在线状态的设置以及响应。
agsXMPP里面有2个重要的地方可以设置在线状态:
1.PresenceType.available和PresenceType.unavailable,XMPP官方不推荐使用PresenceType.unavailable来实现隐身,为什么?A用户给B用户(或者所有用户)发送PresenceType.unavailable,那就相当于下线了,根本不能识别是“隐身”还是“下线”,有些偏门的工具喜欢把隐身的用户给显示出来。。。。。。。所以,那就不建议用PresenceType.unavailable咯。
2.ShowType.XXXXX,这个就不用多说了,其本身就是设置多种在线状态的。。。。
下面的代码实现了如何告诉特定好友(用循环就可以多个好友了),自己的在线状态:
/// <summary>
/// 告诉服务器/好友,我的当前可视状态
/// </summary>
/// <param name="jidTo">null表示通知服务器,非null则是指定好友</param>
/// <param name="visible">0:可视,1:invisible,2:unavailable</param>
public static void ChangMyState(String jidTo, int visible)
{
Presence p = new Presence();
if (jidTo != null)
p.To = new Jid(jidTo);
if (visible == 0)//上线,完全可视
{
p.Type = PresenceType.available;
p.Show = ShowType.chat;
}
else if (visible == 1)//上线,不可见
{
p.Type = PresenceType.available;
p.Show = ShowType.away;
}
else if (visible == 2)//下线,不可见
{
p.Type = PresenceType.unavailable;
}
Cls_Config.XmppCon.Send(p);
}